黑马程序员技术交流社区

标题: 对象包装类对象问题 [打印本页]

作者: 罗广伟    时间: 2013-8-2 11:29
标题: 对象包装类对象问题
本帖最后由 杨兴庭 于 2013-8-5 18:53 编辑

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

作者: 王靖远    时间: 2013-8-2 12:01

Integer x=new Integer("123");//我觉得这句底层应该调用了Integer.parseInt("123");然后将结果作为参数传入构造函数
作者: 罗广伟    时间: 2013-8-2 17:51
王靖远 发表于 2013-8-2 12:01
Integer x=new Integer("123");//我觉得这句底层应该调用了Integer.parseInt("123");然后将结果作为参数传 ...

那内存中是什么样的呢?
作者: 王靖远    时间: 2013-8-2 17:55
罗广伟 发表于 2013-8-2 17:51
那内存中是什么样的呢?

这个解释不好。"123"作为参数就是调用Integer.parseInt()。new Integer(123)就是包装吧。至于内存中什么样的不懂
作者: 罗广伟    时间: 2013-8-2 18:22
王靖远 发表于 2013-8-2 17:55
这个解释不好。"123"作为参数就是调用Integer.parseInt()。new Integer(123)就是包装吧。至于内存中什么 ...

哦,多谢了。
作者: 645420297    时间: 2013-8-2 21:44
当对象建立就会在 堆内存中开辟一片内存空间并给这片空间赋一个地址值,你传入的123则是在栈内存中通过地址值指向堆内存的
作者: 罗广伟    时间: 2013-8-5 09:26
645420297 发表于 2013-8-2 21:44
当对象建立就会在 堆内存中开辟一片内存空间并给这片空间赋一个地址值,你传入的123则是在栈内存中通过地址 ...

那123是存在与常量池中吗?还是什么样的
作者: 心灵之歌    时间: 2013-8-5 18:39
Integer对象里面存的是123的地址。不可以是123本身,因为如果是本身的话,后面要是还有数字,那这个Integer对象里面就会变成一个胖子啦!字符串在方法区的地址池中都会保留一份!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2