黑马程序员技术交流社区

标题: 关于String str="123"和String str=new String("123")的区别 [打印本页]

作者: 爱如kongcheng    时间: 2015-4-23 10:44
标题: 关于String str="123"和String str=new String("123")的区别
关于String str="123"和String str=new String("123")的区别。本来一直有疑问,在网上找了答案,明白了一些,和大家有个交流,欢迎补充纠正。


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

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

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

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

作者: 爱如kongcheng    时间: 2015-4-23 10:47
这里补充分析(不太会发帖),输出结果依次是false , true , false , true。
作者: 爱如kongcheng    时间: 2015-4-23 10:57
一、在内存中,存储数据的地方分为栈和堆。
String str1="123"  str1是存在栈里面的。
同理str3也是在栈里面的,只是再存之前要先检查栈中是否已经存在要生成的对象,若有就就直接存储上该对象“123”的引用,若没有则在栈中存上新对象。这里因为已经存在了,所以str3直接存上之前的引用。
二、而String str2=new String(“123”)将对象存在堆中,无论之前有没有,都要重新创建新对象。
三、==判断的是对象的引用是否相同,堆和栈中显然不相同。equanls()判断的是对象的内容是否相同。







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