为什么输出是String而不是Object

前边说了我准备写一下关于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

你可能感兴趣的:(JavaSE,java晋级之路,对象,实例,java,数据结构,算法)