关于java 中堆和栈的理解

Java 中对象的创建方式 

平时我们写的一条创建对象的语句,如: Object o = new Object(); ,就是创建了一个 Object 的对象,并且有 o 来应用这个对象,必须强调的一点是—— Java 是没有指针这个概念的,所以这里说的是引用。 

当执行过这一条语句之后,在内存中就会出现两个位置,用于保存 o 和 o 所引用的对象,这两个地方分别是一个栈和一个堆,在栈里放的是引用 o ,在堆里放的是 o 所引用的对象,那么 o 是怎么引用到那个新创建的对象的呢?这里需要说明一点,其实本质上在栈里的引用变量存放的都是一串代表 0 或 1 的位,这一些位组合起来便是在堆里的对象的地址,这有点像是 C 语言里的指针。 

如果又有一个 Object o2 = o; 那么 o2 这个变量也会保存到栈里面,并且 o2 在栈里的值和 o 是相同的,也就是说 o2 和 o 引用的是同一个对象。但是如果有: Integer i1 = new Integer ( 1 ) ; 和 Integer i2 = new Integer(1); 这两条语句,那么将会在堆里生成两个不同的对象,并且分别由 i1 和 i2 引用,也就是说这时候 i1 和 i2 内的位组成的数值时不相等的

posted @ 2013-05-15 21:12  东城卫  阅读(175)  评论(0)    收藏  举报