为什么第6行和第8行代码注释掉和不注释掉结果为什么会不同,这明明是两个String对象,用==来判断应该就为false吧,为什么左边注释掉的结果为false,右边不注释的又为true呢?难道赋值以后a和b的地址又变的一样了吗?![](https://userblink.csdnimg.cn/20210328/weixin_44096133/pic/c012cbcc5f0a7a8e53a01a5dab125039-0.jpg)
![](https://userblink.csdnimg.cn/20210328/weixin_44096133/pic/9c127c633d09e58d198680f982e7868c-1.jpg)
![](https://userblink.csdnimg.cn/20210328/weixin_44096133/pic/c012cbcc5f0a7a8e53a01a5dab125039-0.jpg)
![](https://userblink.csdnimg.cn/20210328/weixin_44096133/pic/9c127c633d09e58d198680f982e7868c-1.jpg)
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在Java中,==
运算符用于比较两个对象是否相等。如果两个对象有相同的内存地址(即它们指向同一个连续的存储空间),那么==
返回true
;否则返回false
。
在这个例子中:
String a = new String(original:"李四");
String b = new String(original:"李四");
这两个字符串对象的内存地址是不同的。所以,当你尝试使用==
操作符比较这两个字符串时,它会返回false
。
然而,在你的代码中,你有一个额外的操作System.out.println(a == b)
。这个打印语句并不直接比较a和b是否相等。实际上,它的作用是在控制台上输出a和b的值,而不是进行比较。
所以,即使a和b的内存地址不同,但它们的值仍然相同,因此print语句输出了相同的值(也就是"a")。这就是为什么即使a和b的地址不同,但是当我们在控制台输出他们的值时,显示的仍然是"a"的原因。
如果你想让程序正确地比较a和b的地址是否相同,你应该取消print语句或者修改print语句以获取a和b的地址后再比较它们。