2013-12-09 3 views
0

Код ниже действительно меня смутил. Результатом является «int array», но если я приведу вторую функцию Confusing, выход будет «Obejct». Интересно, что на Java действительно означает нуль.«Нуль» относится к любому типу?

А также почему Смешение класс создается с вызовом второй конструктор, а не первый конструктор

Почему компилятор будет вызывать этот конструктор, как это всегда вызывает наименьшую расширение класса

public class Confusing { 

    public Confusing(Object o){ 
     System.out.println("Obejct"); 
     if(o instanceof Object) 
      System.out.println("Object"); 
    } 

    public Confusing(int[] iArray){ 
     System.out.println("int array"); 
     if(iArray instanceof int[]) 
      System.out.println("Array"); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     new Confusing(null); 
    } 

} 
+3

http://stackoverflow.com/questions/2707322/what-is -null-in-java –

+0

Null ничего не значит, вы можете ничего пропускать вместо какого-либо объекта, но редко это хорошая идея, если метод не ожидает этого. –

+0

Почему вы должны проверить, является ли это 'instanceof'? Разве «type hinting» не делает этого? –

ответ

3

null является не объект, это ссылка см JLS:

Существует также специальный null тип, тип выражения null, , который не имеет названия. Поскольку тип null не имеет имени, невозможно объявить переменную типа null или отличить ее от null. Ссылка null - единственное возможное значение выражения null тип. Ссылка null всегда может быть привязана к любому ссылочному типу. В практике, программист может игнорировать null тип и просто делать вид, что null это просто специальный литерал, который может быть какой-либо ссылки типа

Смежные вопросы