为什么输出是String而不是Object

来源:互联网 发布:ubuntu 查看用户 编辑:程序博客网 时间:2024/05/01 09:06

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

4 0