先看下面这段代码:
[b]
结果是:NullConfusing [message=STRING][/b]
null 关键字类型判断
[b]结果是:无输出[/b]
多加一个构造方法:
[b]结果是:编译器提示异常 The constructor NullConfusing(Object) is ambiguous[/b]
[size=medium]为什么会这样呢?
java 编程思想每四版 P157 -- 构造器与多态
“它们实际上是static方法,只不过该方法的声明是隐式的”。而我们知道方法调用都是先检查子类再检查父类。如果子类有就现有子类的方法。这点很好理解,跟CSS选择器一样,谁更具体选择谁。所以,当只有NullConfusing(Object o)、NullConfusing(String str)两个构造函数时,null多适合调用,但是String继承自Object更具体些,所以选择String。当再出现一个构造函数NullConfusing(Character str),编译器就困惑了,选String好呢,还是选Character,多是同一个妈生的,选谁多不合适呀,所以摆工了。
null是java中的一个关键字,并不代表任何数据类似,所以它并不是String类型,只可以将其理解为一块分配的内存空间,至于这块内存空间将来会是存什么类型的值现在就不知道了。
[/size]
public class NullConfusing {
String message = "";
public NullConfusing(Object o) {
message = "OBJECT";
}
public NullConfusing(String str) {
message = "STRING";
}
@Override
public String toString() {
return "NullConfusing [message=" + message + "]";
}
public static void main(String[] args) {
System.out.println(new NullConfusing(null));
}
}
[b]
结果是:NullConfusing [message=STRING][/b]
null 关键字类型判断
public static void main(String[] args) {
if (null instanceof String ) {
System.out.println("null is instanceof String ");
}
}
[b]结果是:无输出[/b]
多加一个构造方法:
public class NullConfusing {
String message = "";
public NullConfusing(Object o) {
message = "OBJECT";
}
public NullConfusing(String str) {
message = "STRING";
}
public NullConfusing(Character str) {
message = "STRING";
}
@Override
public String toString() {
return "NullConfusing [message=" + message + "]";
}
public static void main(String[] args) {
System.out.println(new NullConfusing(null));
}
}
[b]结果是:编译器提示异常 The constructor NullConfusing(Object) is ambiguous[/b]
[size=medium]为什么会这样呢?
java 编程思想每四版 P157 -- 构造器与多态
“它们实际上是static方法,只不过该方法的声明是隐式的”。而我们知道方法调用都是先检查子类再检查父类。如果子类有就现有子类的方法。这点很好理解,跟CSS选择器一样,谁更具体选择谁。所以,当只有NullConfusing(Object o)、NullConfusing(String str)两个构造函数时,null多适合调用,但是String继承自Object更具体些,所以选择String。当再出现一个构造函数NullConfusing(Character str),编译器就困惑了,选String好呢,还是选Character,多是同一个妈生的,选谁多不合适呀,所以摆工了。
null是java中的一个关键字,并不代表任何数据类似,所以它并不是String类型,只可以将其理解为一块分配的内存空间,至于这块内存空间将来会是存什么类型的值现在就不知道了。
[/size]