public class IntegerDemo {
public static void main(String[] args){
int i = 10;
Integer j = new Integer(i);
int k  = j.intValue();
System.out.println(j);
System.out.println(k);
}
}运行结果:
10
10j是类Interger的对象,我的理解打印j应该是一个地址值,为什么会打印出10?
谢谢!

解决方案 »

  1.   

    对象打印的时候都是打印其toString()方法调用之后的结果,只有当类没有覆盖Object根类上的toString实现的时候才会打印“类名加数字”形式。
      

  2.   

    直接输出j, 会调用的Integer类的toString()方法, Integer类的toString()方法重写了Object类的toString()方法 方法如下:public String toString() {
        return String.valueOf(value);
    }
      

  3.   

    自动拆装箱,运行时java会根据情况将Interger对象自动转换为: 对象.intValue();即打印出整数值
      

  4.   

    System.out.println(12);
    这样直接打印整数呢,JAVA中输出时好像会调用toString方法。是不是也先调用了Integer的toString方法,然后打印出了12。所以是不是应该像二楼所说的因为Integer重写了toString方法所以才打印出了数字。如果Interger没有重写toString方法,是不我们正常打印整数都打印出来的是地址呢?
      

  5.   

    顺便请问各位一下,像int ,long , float 这样的基本数据类型是存储在什么地方的,堆空间还是栈空间?
      

  6.   

    静态字段在方法区,非静态字段在堆区
    局部变量在java栈中