黑马程序员技术交流社区
标题:
关于方法重载的一个问题
[打印本页]
作者:
kellyzyb
时间:
2013-10-10 10:48
标题:
关于方法重载的一个问题
本帖最后由 kellyzyb 于 2013-10-10 10:54 编辑
public class TestOverLoad
{
public static void main(String[] args)
{
Test test = new Test();
test.print(null);
}
}
class Test
{
public void print(String some)
{
System.out.println("String version print");
}
public void print(Object some)
{
System.out.println("Object version print");
}
}
复制代码
刚刚在网上看到一段关于重载的代码
关键在于NULL的这参数,这个参数属于Object ,属于String类吗?如果属于String类,传参数的时候不是应该带""号吗。
运行的结果是String version print . 按结果看是把NULL当成了String 来处理。这点不是很理解。
作者:
张宏祚
时间:
2013-10-10 11:13
本帖最后由 张宏祚 于 2013-10-10 11:20 编辑
Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。
可以做一个简单的例子:
//null是对象吗? 属于Object类型吗?
if (null instanceof java.lang.Object) {
System.out.println("null属于java.lang.Object类型");
} else {
System.out.println("null不属于java.lang.Object类型");
}
结果会输出:null不属于java.lang.Object类型
同理:
if (null instanceof java.lang.String) {
System.out.println("null属于java.lang.String类型");
} else {
System.out.println("null不属于java.lang.String类型");
}
结果是:null不属于java.lang.String类型
所以null既不是object,也不是String ,当重载的时候,参数是null而自动选择String,这个还需要进一步的交流!和楼主共同进步!
作者:
飘落
时间:
2013-10-10 11:36
在Java语言规范中,null表示引用类型的变量的值为空,不代表任何对象或实例。
有一点要知道,null不是一个关键字,如同true和false不是关键字一样,它们都是值。
以下是我的看法:null值可以传给任何引用类型的变量,所以把String类型参数的方法注释掉,
结果就是另一个了,由此可以看出JVM把null传给了继承体系中的子类了。这正好就是多态。
如果重载方法中的参数不存在继承,调用方法时报错。
作者:
睡不够的猪
时间:
2013-10-10 12:31
我的理解是null不是一个关键字 是一个返回值
String和Object作为对象 都会返回地址值 而地址值是以字符串形式表现的
所以当对象不存在时 返回空值null 所以这个null系统默认为字符串
不知道理解的对不对 欢迎指正!
作者:
To
时间:
2013-10-10 12:45
楼主你好。如果问题已解决请及时将帖子状态改为提问结束,如果未解决请继续提问。谢谢合作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2