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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

关于String str="123"和String str=new String("123")的区别。本来一直有疑问,在网上找了答案,明白了一些,和大家有个交流,欢迎补充纠正。


搜狗截图15年04月23日1042_1.png (12.33 KB, 下载次数: 67)

搜狗截图15年04月23日1042_1.png

搜狗截图15年04月23日1042_1.png (12.33 KB, 下载次数: 70)

搜狗截图15年04月23日1042_1.png

2 个回复

倒序浏览
这里补充分析(不太会发帖),输出结果依次是false , true , false , true。
回复 使用道具 举报
一、在内存中,存储数据的地方分为栈和堆。
String str1="123"  str1是存在栈里面的。
同理str3也是在栈里面的,只是再存之前要先检查栈中是否已经存在要生成的对象,若有就就直接存储上该对象“123”的引用,若没有则在栈中存上新对象。这里因为已经存在了,所以str3直接存上之前的引用。
二、而String str2=new String(“123”)将对象存在堆中,无论之前有没有,都要重新创建新对象。
三、==判断的是对象的引用是否相同,堆和栈中显然不相同。equanls()判断的是对象的内容是否相同。


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