黑马程序员技术交流社区

标题: String a = "123" 和String b ="123" [打印本页]

作者: zsx6688    时间: 2015-8-20 22:19
标题: String a = "123" 和String b ="123"
System.out.println(a==b);输出为true,但String a= new String() String b = new String()   输出System.out.println(a==b);为false,为什么?
还有String a = new String();  a="123" String b="123",在内存中到底是怎样的,为什么这个结果也为false
作者: STARlove    时间: 2015-8-20 22:24
具体的请查询“==”和equals的在比较字符串时候区别
作者: 史柯    时间: 2015-8-20 22:25
你是创建了两个字符串对线,a和b。
对象之间的==比较的是地址值。
你两个对线的地址值不相同,所以是false;
你加上一句,a=b,就可以让b的地址值也指向a。
让a和b共享一个地址值,a==b返回的就是true了。



然后“123”==“123”
这是两个常量,常量的对比是在方法去里进行的。
创建了第一个123后,再创建一个123,java会直接把第二个123的地址值指向第一个123.
这样可以节约内存,所以“123”=="123"返回的就是true


希望可以帮到你
作者: 至尊幽蓝    时间: 2015-8-20 22:33
很奇怪,你那23个技术分是怎么得的。
作者: 樱花飘过    时间: 2015-8-20 22:38
==是比较地址值,一旦"abc"是在常量池,而new String,一new就是一块新的地址,所以是不一样的
作者: iamzk    时间: 2015-8-20 22:41
恩,楼主是骗回复的?
作者: Liveei    时间: 2015-8-20 23:01
史柯正解
作者: F灬灬    时间: 2015-8-20 23:41
因为newString是在堆空间开辟内存,内存地址值不同所以两个String也会是FALSE




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