基本数据类型存放在栈中,引用也存放在栈中,所以1,i,b应该都在栈中,而b的实例对象在堆中。是否堆中存放实例对象的地址,而实例对象的值任然是栈中的那个1呢?
有个东西叫做自动拆箱!!
你运行这段程序后看看它的字节码就了解是怎么回事了!!
E:>javap -c Test
Warning: Binary file Test contains com.JUtils.base.Test
Compiled from "Test.java"
public class com.JUtils.base.Test {
public com.JUtils.base.Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":
()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: new #2 // class java/lang/Integer
5: dup
6: iconst_1
7: invokespecial #3 // Method java/lang/Integer.""
:(I)V
10: astore_2
11: getstatic #4 // Field java/lang/System.out:Ljava/
io/PrintStream;
14: iload_1
15: aload_2
16: invokevirtual #5 // Method java/lang/Integer.intValue ///////重点是这句代码!!!
:()I
19: if_icmpne 26
22: iconst_1
23: goto 27
26: iconst_0
27: invokevirtual #6 // Method java/io/PrintStream.printl
n:(Z)V
30: return
}
这里好冷清~有人吗~~~
这种情况下不是得,这种b的对象的1也是在堆里面,堆里面分了空间就是用来放这些的啊.
你想我们所有的引用类型(比如自己定义的类)都是由基本类型组成,这样一步一步的组成的,如果堆里面不放值,全在栈中,那栈得要多大啊.
所以说引用对象放在对中是对的. 值类型放在栈中确实的说是不对的,有些也是在堆当中的.
堆中放着一个Integer对象,其值为1,但Integer对象中还有其他属性和方法,不是一个简单的值