黑马程序员技术交流社区

标题: 为什么说 String s = new String ("abcdef"); 语句创建了两个对象? [打印本页]

作者: sharplance    时间: 2015-10-27 20:37
标题: 为什么说 String s = new String ("abcdef"); 语句创建了两个对象?
为什么说 String s = new String ("abcdef"); 语句创建了两个对象?
作者: C威    时间: 2015-10-27 21:06
只要new出来的都在堆内存,"abcdef"在常量池也是对象,有地址
作者: qq739617099    时间: 2015-10-27 21:37
String s = new String ("abcdef");

看结果猜过程

我猜应该是这样 String s = new String ("abcdef"); 就等于

new String().name = s;
new String().属性 = “abcdef”;

这个属性应该根据类中的成员属性来决定
作者: 北极的男娃    时间: 2015-10-27 21:41
还没学到String  不懂
作者: NUMONE    时间: 2015-10-27 21:42
感谢楼上,学习了
作者: lkjmnbqwe    时间: 2015-10-27 21:43
String这个类比较特别  除了堆内存还在字符串池建对象
作者: sxfhblf123    时间: 2015-10-27 21:50
受教了,多谢
作者: 307117758    时间: 2015-10-27 22:31
"abcdef"在常量池里,堆里面开辟了一个空间存地址值,另外new出来的肯定有对象,也有地址值,可以用toString打出来看看地址值。
作者: 大头爱傻瓜    时间: 2015-10-27 22:35
堆中一个,字符串常量池一个,没记错的话应该是这样
作者: myworkspace    时间: 2015-10-27 22:58
字符串"abcdef"会存在常量池中, new出来的对象存放在堆内存.
作者: polarfox17    时间: 2015-10-27 23:00
不是很懂。。。。
作者: jyf823691221    时间: 2015-10-27 23:01
楼下讲得好  支持一个
作者: 达达达    时间: 2015-10-27 23:36
一个new String是一个对象,存在堆内存; "abcdef"也是一个对象,存在方法区的常量池。
作者: redsifei    时间: 2015-10-27 23:56
String s=new String("aaa");
变量s在栈中 他存着一个地址指向堆中new出来的对象,堆中又存着一个地址指向常量池中的字符串常量。

作者: _let'sgo    时间: 2015-10-28 14:08
刚学习了,String类比较特殊,new在内存中开辟了一个空间,一个对象,“abcdef”本身是一个对象。所以是两个对象。
作者: 顽固派。    时间: 2015-10-28 14:38
不就只创建了一个对象吗,哪来的两个对象。
作者: Seven、HQ    时间: 2015-10-28 17:11
字符串是特殊的引用数据类型,abcdef存储在常量池中,也作为一个常量对象,String s也是一个对象
作者: qi8215686    时间: 2015-10-28 19:45
值是一样的,new 出的指向常量池中的字符串,地址不一样,所以是2个
作者: KyluS    时间: 2015-10-28 21:30
堆内存跟栈内存各一个吧
作者: sharplance    时间: 2015-10-28 21:46
常量池的概念我还不太清楚,总之先记下了。




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