首页 新闻 会员 周边 捐助

java String 结果为什么是这样的?

0
悬赏园豆:30 [已解决问题] 解决于 2016-10-30 18:46
public class Test {

    public static void main(String[] args) {
        
        String a = "aa";
        String b = "aaaa";
        //a+=a;
        System.out.println(a+a);
        System.out.println(b==(a+a));
        //System.out.println(b==a);
        
    }

}
结果如下:
aaaa
false

请大神帮忙看一下结果为什么是false

Cream.icend的主页 Cream.icend | 初学一级 | 园豆:133
提问于:2016-08-12 10:29
< >
分享
最佳答案
0

==比较的对象引用,a+a虽然产生的值是aaaa,但是已经是新的地址了,这种对比没有什么意义 。wll77wang 的答案很标准哦

收获园豆:30
全力以赴001 | 小虾三级 |园豆:629 | 2016-08-12 16:13

String的值不是常量吗.没new怎么会有俩个"aaaa"出现?

JCYL-Pandong | 园豆:200 (初学一级) | 2016-08-15 10:30

@吸收啊啊: 我个人觉得是在加之前不能判断a+a与aaaa是否相等,所以会找个新地址

Cream.icend | 园豆:133 (初学一级) | 2016-10-30 18:48
其他回答(7)
0

这就是Java跟C#的不一样吧,C#第二个是True。。。

顾晓北 | 园豆:10898 (专家六级) | 2016-08-12 10:35
0

它指向的对象在内存中的存储地址,并不是“值”本身。所以String用equals

laugher_ccc | 园豆:593 (小虾三级) | 2016-08-12 10:40

(a+a)产生了一个新的对象 与b是不同的两个对象

支持(0) 反对(0) laugher_ccc | 园豆:593 (小虾三级) | 2016-08-12 10:41
0

不建议使用==来做字符串的对比
返回false是因为内存储存的地址不一样
详细:http://www.cnblogs.com/tinyphp/p/3768214.html

Kntro | 园豆:210 (菜鸟二级) | 2016-08-12 11:13
0

==判断的是内存地址,对象不同地址不同,如果你用.equals()方法判断的话,比较的是值是不是相同 ,会返回true。

wll77wang | 园豆:18 (初学一级) | 2016-08-12 11:37
0

返回false是因为内存储存的地址不一样
详细:http://www.cnblogs.com/tinyphp/p/3768214.html

小熊vs | 园豆:20 (初学一级) | 2016-08-12 15:50
0

字符串比较用equals()

jgig11 | 园豆:338 (菜鸟二级) | 2016-08-19 11:00
0

 equals()是比较两个变量的内容。

 ==是比较两个变量的地址

大脸猫先生 | 园豆:206 (菜鸟二级) | 2016-08-26 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册