为什么输出是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值