关于引用的存放问题

[复制链接]
查看11 | 回复3 | 2007-11-21 07:35:07 | 显示全部楼层 |阅读模式
引用类型肯定是存放在栈里的.这个是无须怀疑的.当定义的是一个引用类型的变量时,JAVA会在栈里开辟一块内存存放引用变量,然后在堆中开辟一块存放该对象的内存.最后将该引用变量指向堆中的内存.我喜欢用实践来证明一些问题.还是用下面的例子来说明问题吧!//定义一个类型为A的类public class A { public int i; publicvoid display(){System.out.println(i); }}//再定义一个类型为B的类,在构造这个类时产生一个A的对象public class B { publicA a; public B(){a=new A(); } }//编写测试类public class Test {public static void main(String[] args){
B b=new B();System.out.println("初始值:"+b.a.i);A aa=b.a;aa.i=33; //改变另一个对象i的值,看是不是影响到b中a对象中的i的值System.out.println("类B中A类i的值:"+b.a.i+"\t重新定义A类i的值:"+aa.i);}}输出:初始值:0类B中A类i的值:33 重新定义A类i的值:33结果证明改变a值的同时也改变了b中a的值.
回复

使用道具 举报

千问 | 2007-11-21 07:35:07 | 显示全部楼层
局部变量放在栈里,全局变量放在堆里a如果在全局声名就是在堆里b写在一个方法里是局部变量肯定是在栈里
回复

使用道具 举报

千问 | 2007-11-21 07:35:07 | 显示全部楼层
通过new产生的对象放在堆里吧,而基本类型的是放在栈里吧,唉,不记得了。
回复

使用道具 举报

千问 | 2007-11-21 07:35:07 | 显示全部楼层
B对象的引用应该是在栈里,new出来的对象本身应该是堆里.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行