示例代码:class A{}public class Test {
static A a;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println(a);
}}
我知道System.out.println方法在处理参数为Object类型的时候,会调用Object对象的toString()方法。
按照我写的示例代码,输出为null。
但是如果我把输出的代码改为:
System.out.println(a.toString());
就会报空指针的异常了,也就是说第一个示例代码中并没用默认调用a.toString()方法。
谁能解释一下原理?谢谢。
static A a;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println(a);
}}
我知道System.out.println方法在处理参数为Object类型的时候,会调用Object对象的toString()方法。
按照我写的示例代码,输出为null。
但是如果我把输出的代码改为:
System.out.println(a.toString());
就会报空指针的异常了,也就是说第一个示例代码中并没用默认调用a.toString()方法。
谁能解释一下原理?谢谢。
a=null;
a指向空!
null是没有内存地址
""是有地址但是里面的内容是空的
//原来它是调用了String的valueOf方法
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
//这是String的valueOf方法
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}