2 zhulingyue77 zhulingyue77 于 2013.09.12 22:17 提问

JAVA 中Null值到底是什么

public class test {

public static void main(String[] args) throws Exception {

Temp temp = new Temp();
temp.test("1");
temp.test(null);
}

}

public class Temp {
public void test(Object a){
System.out.println("test Object");
}
public void test(String a){
System.out.println("test string");
}
}

为什么输出结果为
test Object
test Object

2个回答

asiaasia666
asiaasia666   2013.09.14 16:20
已采纳

输出结果是
test string
test string
null就是代表空对象,在内存中没有占用空间,只占了一个引用空间。

只针对你写的测试例子来将,你的例子更应该是一个overload重载的测试用例。
简单说下重载:jdk重载编译期间就决定了代码的走向,而编译时判断依据就是根据方法中参数类型,以及方法调用者传入的参数,将前者最大程度(Class继承结构)匹配后者的方法,作为编译结果。运行时也将使用次方法。

回到你的问题上,null既然是空对象,那么既可以作为Object (如Object o = null;编译通过),也可以作为String (如String s = null;编译通过)。java.lang.String也是继承的Object类。所以最大程度匹配后,编译器决定执行public void test(String a)方法。

综上,代码test(null)的运行结果为:test string

对重载想要有更深的理解,推荐你查看http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2.10

hellokittylin
hellokittylin   2013.09.13 09:12

运行这段代码输出结果是
test string
test string

zhulingyue7
zhulingyue7 打错了, 你能解释一下么?
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java中的null到底是什么?
原文地址:What exactly is null in Java?
云计算到底是什么??
云计算到底是什么??云计算到底是什么????
互联网思维:到底是什么
互联网思维:到底是什么,互联网思维:到底是什么,互联网思维:到底是什么
NULL到底是什么
/* A null pointer constant.  */ #if defined (_STDDEF_H) || defined (__need_NULL) #undef NULL /* in case has defined it. */ #define NULL ((void *)0) #endif /* NULL not defined and or need NUL
通过java代码获取的mysql中的null值返回值情况-----点滴记录
java代码访问mysql数据库。mysql中的默认的null值,返回时是以空字符串""返回的,并不是null。这一步检验有时候会在java代码检验返回值是否为空时候用到。代码:databaseReturnString.equals("")
java枚举到底是什么鬼?
枚举类型是什么呢,其实是指一组固定的常量组成合法值的类型。
Java中null与数据库的NULL的认识
java和数据库中null、NULL的认识                                                    java和数据库中null、NULL的认识 Java是面向对象的高级语言。java中,null表示类或对象的变量是空,不代表任何对象或实例,可以将null赋给引用类型变量,但不可以将null赋给基本类型变量;任何对象在没有进行初始化时,它默认的值都
[JS]this 的值到底是什么?
你可能遇到过这样的JS面试题:var obj = { foo: function(){ console.log(this) } } var bar = obj.foo obj.foo() // 打印出的 this 是 obj bar() // 打印出的 this 是 window请解释最后两行函数的值为什么不一样。初学者关于this的理解一直很模糊。函数调用首先需要
回复:null是什么数据类型
例1码如下: 123456789101112131415 public class Test2 {  public void method(Object o) {    System.out.println("Ob
ASP/VB用ADO常量说明
ASP访问数据库,当然要用ADO ADO中很多常量,如:adNumeric,到底是什么值? 本文件中包含了常用的常量值说明。