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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗广伟 中级黑马   /  2013-8-2 11:29  /  1098 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-5 18:53 编辑

Integer x=new Integer("123");
Integer x=new Integer(123);
问题:这两条语句在内存中是什么样的?
第一句,在栈内存中有个x,x中存放的是Integer对象地址,在堆内存中存放的是Integer对象,
那么堆内存中Integer对象里面存的是123呢?还是存的是字符串123的地址,123存在于方法区的常量池中?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

9 个回复

倒序浏览

Integer x=new Integer("123");//我觉得这句底层应该调用了Integer.parseInt("123");然后将结果作为参数传入构造函数

评分

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

查看全部评分

回复 使用道具 举报
王靖远 发表于 2013-8-2 12:01
Integer x=new Integer("123");//我觉得这句底层应该调用了Integer.parseInt("123");然后将结果作为参数传 ...

那内存中是什么样的呢?
回复 使用道具 举报
罗广伟 发表于 2013-8-2 17:51
那内存中是什么样的呢?

这个解释不好。"123"作为参数就是调用Integer.parseInt()。new Integer(123)就是包装吧。至于内存中什么样的不懂
回复 使用道具 举报
王靖远 发表于 2013-8-2 17:55
这个解释不好。"123"作为参数就是调用Integer.parseInt()。new Integer(123)就是包装吧。至于内存中什么 ...

哦,多谢了。
回复 使用道具 举报
当对象建立就会在 堆内存中开辟一片内存空间并给这片空间赋一个地址值,你传入的123则是在栈内存中通过地址值指向堆内存的

评分

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

查看全部评分

回复 使用道具 举报
645420297 发表于 2013-8-2 21:44
当对象建立就会在 堆内存中开辟一片内存空间并给这片空间赋一个地址值,你传入的123则是在栈内存中通过地址 ...

那123是存在与常量池中吗?还是什么样的
回复 使用道具 举报
Integer对象里面存的是123的地址。不可以是123本身,因为如果是本身的话,后面要是还有数字,那这个Integer对象里面就会变成一个胖子啦!字符串在方法区的地址池中都会保留一份!

评分

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

查看全部评分

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