黑马程序员技术交流社区
标题:
关于字符串问题
[打印本页]
作者:
黑马-邢广耀
时间:
2012-12-26 08:59
标题:
关于字符串问题
String str = "abc";
String str2 = "abc";
String str3 = str2;
String str4 = new String(abc);'
请问他们在内存中指向的是同一个对象吗?说明原因啊,否则会苦恼的。
作者:
黄锦成
时间:
2012-12-26 11:06
前面3个指向的是同一个对象,因为他们都是在常量池中;最后一个会new出两个对象,与前3个是不同的对象
作者:
陈泽鑫
时间:
2012-12-26 16:00
这四个字符串都是同一个,只是指向了不同变量的引用而已,
当创建字符串的时候,字符串就被存入了一个"暂存池",如果以后需要创建同一个字符串的时候,就将暂存池内的相同字符串的引用赋给变量.
如果添加的是字符串中没有的字符串,就会将这个字符串添加到暂存池内,所以说字符串不存在修改,而"修改"只是将字符串的引用修改了而已
作者:
张会文
时间:
2012-12-29 21:45
String str = "abc";
String str2 = "abc";
String str3 = str2;
String str4 = new String(abc);
看指向的是否是一个对象要看对象是否相同,如果再次创建的对象相同时就不会再创建内容空间,而会指向第一次创建的内存空间。
“abc”对象在创建的时候已经开辟了内存空间,所以str和str2指向是相同的,其他的是不相同的。
作者:
王玮
时间:
2012-12-29 22:03
第一:对于 String str4 = new String("abc") ,只要是用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。new创建字符串时首先查看池中是否有相同值的字符串,如果有,则拷贝一份到堆中,然后返回堆中的地址;如果池中没有,则在堆中创建一份,然后返回堆中的地址
第二:对于String str = "abc"; 先定义一个名为str的对String类的对象引用变量:String str;,然后,在栈中(字符串常量池)查找有没有存放值为 "abc "的地址,如果没有,则开辟一个存放字面值为 "abc "的地址,接着创建一个新的String类的对象s,并将s 的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象s。如果已经有了值为 "abc "的地址,则查找对象s,并返回s的地址。最后,将s1指向对象s的地址。
故String str = "abc"; 线程池中没有,在线程池创建个
String str2 = "abc"; 在线程池中存在,直接把“abc” 地址付给str2
String str3 = str2; 把str2地址付给str3
String str4 = new String(“abc”); //你的问题里面,abc 没加“”,在堆内存中创建 ,把在线程池中的数据付给在对内存中开辟的空间,然后把地址返回给str4
作者:
而今从头越2012
时间:
2012-12-30 12:29
下面只是个人的见解,仅供参考:
(1):String str = "abc";这个字符串会在内存中开辟一个空间,可以理解成,“abc”就相当于是一个匿名的字符串对象。
(2):String str2 = "abc";这个字符串在开辟的时候,会先向内存中查找是否存在,结果在内存中已经存在了“abc”,所以会直接指向这个字符串。
(3):String str3 = str2;关于这个就好理解了,就是把str2的字符串地址直接赋给str3,str3当然指向str2的内容了。
(4):String str4 = new String(abc);这个就是最常见的了,实例化一个对象,开辟一个新的空间地址值。
举个例子,
String s=new String("xyz");这里面有几个对象?
我觉得,这里有两个对象,首先“xyz”这就是一个对象,是一个匿名对象;接下来new,又重新开辟了一个对象,分配了一个新的地址值,而先前的那个“abc”变成了垃圾,等待垃圾回收机制的处理。
作者:
cyh8807
时间:
2012-12-30 14:11
我个人感觉你的问题在内存中应该是这样分布的,由于 str ,str 2 ,str 3相当于是局部变量初始化,所以在栈内存中直接赋值了
而只有 str4 是引用类型的变量,下面附图供你参考,如分析不对,可以指出,大家共同学习
1.jpg
(19.48 KB, 下载次数: 41)
下载附件
2012-12-30 14:09 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2