黑马程序员技术交流社区
标题:
new String 的对象问题
[打印本页]
作者:
§傻、才乖
时间:
2013-12-10 01:15
标题:
new String 的对象问题
String s=new String("abc");
这个在内存中创建的是两个对象,但s指向的是哪个对象,s的值是哪个对象的值,还是这两个对象的值有什么联系?
求解
作者:
§傻、才乖
时间:
2013-12-10 01:19
如果 s指向的是new String 那么 “abc”的对象值又存到哪了
作者:
高亮亮
时间:
2013-12-10 07:48
本帖最后由 高亮亮 于 2013-12-10 07:50 编辑
首先,只要是new出来的都是在对内存中,开辟了空间,将空间的地址值赋给new出来的那个对象。这样,String s=new String("abc");s就是一个对象,s指向的是那个存储了下面那个存放"abc"String数组地址值的那个对象。
又是因为这个String型的s是一个数组,而数组又是个应用类型,可以理解为指向另一块地址,那个地址里面相当于存放了字符"abc"。也可以看作一个对象吧。
这样,就是两个对象了。
作者:
翼展哈哈
时间:
2013-12-10 08:59
本帖最后由 翼展哈哈 于 2013-12-10 09:05 编辑
楼主您好,我说一下我个人的理解吧!
“等号左边String s”,声明了一个String类型的引用变量;等号右边的“new String("abc")”,查阅jdk文档,显示:
String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
由此可知,您说的两个对象,应该分别是指参数字符串常量“abc”和在堆中新创建的内容也为"abc"的对象实体(即参数字符串常量的副本)。引用变量s指向的当然是后者,即新创建的对象实体,而非字符串常量"abc".因为如果指向字符串常量的话,那就直接把字符串常量的地址值赋给引用变量s就可以了,就没有必要再创建一个具有相同内容的对象实体啦!
希望您的理解,有什么说的不对的,欢迎批评指正!
作者:
史超
时间:
2013-12-10 09:01
String s = new String("abc");当你new的同时,已经在栈内存中生成了一个对象s,而new出来的东西就是“abc”,new出来之后“abc“会有一个地址值(如:0x0011),它会把地址值赋给S。所以s指向的对象就是带有地址值的”abc“;S的值就是abc;他们的联系实际就是用地址值串联起来的。
作者:
雪飘舞
时间:
2013-12-10 09:10
本帖最后由 雪飘舞 于 2013-12-10 09:12 编辑
String s = new String("abc");在栈内存中开辟了一个变量空间s,s指向了new String的内存首地址值,而new String里面存放的则是abc的内存首地址值。
即:s是引用型变量,s指向的是new出的对象的首地址值,而new出的对象里面存储的则是对象abc的内存首地址值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2