前边说了我准备写一下关于java提高的专栏,要怎么提高呢,我觉得要想提高还得从问题入手,我想先把从国外网站上别人提问的问题拿到这里,最后再做一下总结和大家相互探讨一下。。 继前边我翻译一道很不错的字符分割题和数组中的跳跃问题之后,今天我有看到一个比较好的问题,如题目所示。。
原文链接:http://stackoverflow.com/questions/23563212/why-output-string-passed-not-object
下面来看一下问题吧,先上代码:
public class test {
public static void main(String[] args) {
magic(null);
}
public static void magic(String s) {
System.out.println("String passed");
}
public static void magic(Object o) {
System.out.println("object passed");
}
}
代码输出是为:
String Passed
但是这是为什么呢,一开始我也很难理解,我感觉编译都会报错。
下面先说一下null吧,Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。
比如:int a = null;是错误的。Ojbect o = null是正确的,null本身不是对象,也不是Objcet的实例。
null作为一个不确定的对象,按理来说两个方法都可以匹配,但是java中有一个规则:优先匹配具体特殊的。
看以下代码:
public class test {
public static void main(String[] args) {
magic(null);
}
public static void magic(Object o) {
System.out.println("object passed");
}
public static void magic(String s) {
System.out.println("String passed");
}
public static void magic(Integer s) {
System.out.println("Integer passed");
}
}
结果会报错,错误如下:
The method magic(Object) is ambiguous for the type test(就是Integer和String相近,无法选择)。
欢迎加我的微博, 我会在微博实时更新文章,交流群:199326422