黑马程序员技术交流社区
标题:
java虚拟机类的常量池的问题
[打印本页]
作者:
hanrongle
时间:
2013-7-12 20:31
标题:
java虚拟机类的常量池的问题
本帖最后由 杨兴庭 于 2013-7-14 18:15 编辑
代码如下:public class AS { String a="a"; String b="b"; String c; public AS(){} public void SetC(String c){ this.c=c; }}
1.变量a和b的值是在AS.class被加载的时候存放到了constant_string_info表里了吗?
2.比如在main方法里new了一个AS as=new AS(); String e="qwe"; as.setC(e);
方法区里面是每一个类都有一个常量池吗,
java开发平台
上每个常量池都有一个constant_string_info表?如果是的话,那么e="qwe"是在哪个常量池检索是否存在“qwe”,是main所在类的常量池吗?
new AS后产生了一个AS对象实例放在了堆中。那么堆中的对象实例都包括哪些内容,是仅仅包括实例的描述,还是包括实例的特有的数据(如果包括,那是值,还是值的引用)?具体的,例如as中c,其值为“qwe”,那么在这个heap中的实例数据包括这个c的值吗,还是指向某个常量池中“qwe”的引用?
作者:
左手神刀
时间:
2013-7-13 23:13
public class AS { String a="a"; String b="b"; String c; public AS(){} public void SetC(String c){ this.c=c; }}
变量a和b的值是在AS.class被加载的时候存放到了constant_string_info表里了吗?
AS.class 被加载的时候 应该是没有a=“a”的,而是在AS h=new AS()的时候才有,这时在堆内存中有变量a和b,而变量c是null;
String e="qwe"; as.setC(e); 执行了这句代码 后, 堆内存中的变量c就指向了对象qwe, 为什么说是对象qwe,是因为 字符串不是基本数据类型,而是对象。
所以在堆内存中有字符串类型的引用变量 a 它指向了对象a, 字符串类型的引用变量b它指向了对象b,字符串类型的引用变量c指向了对象qwe。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2