public class Test04 {
public static void main(String[] args) {
Integer i=new Integer(22);
System.out.println(i);
}
}
这段代码输出结果是22,为什么是22,而不是地址呢?
public class Test04 {
public static void main(String[] args) {
Integer i=new Integer(22);
System.out.println(i);
}
}
这段代码输出结果是22,为什么是22,而不是地址呢?
应该是触发了自动拆箱?Integer是java对int的包装类,在需要传递int作为参数的地方传入一个Integer对象,java会自动把这个Integer拆成int,反之在Integer作为参数的地方传int,会触发自动装箱
----------------------更新----------------------------
我通过debug看了一下源码的调用过程,首先调用的重载方法是println(Object x) ,在println(Object x)里面调用的是String.valueOf(x),而在valueOf(Object obj)调用的是 obj.toString()
到这里就能看出来,println一个引用数据类型都会自动调用toString方法
而Integer类作为Java中基本数据类型int的包装类,它在里面写好了toString方法,就是返回整数值对应的字符串