A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hanrongle 中级黑马   /  2013-7-12 20:31  /  1094 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 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 07:00

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

2 个回复

倒序浏览
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。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马