如何解决Java中==和.equals之间的区别
据我了解,这是因为a和b是对同一对象(apple2e)的两个不同引用。
因为使用字符串实习,并且 因为使用字符串实习a
而b
对同一String
对象的引用不同。
不幸的是,您的代码没有执行您认为的操作。试试这个:
String a = "apple2e";
String b = "apple2e";
System.out.println("a==b? " + a == b); // "false"
System.out.println("a==b? " + (a == b)); // "a==b? true"
Java自动插入所有字符串文字。
就是为什么第二个sysout打印其功能的原因。仅"false"
因为字符串连接(+
)的优先级高于==
,才输出第一个sysout ,因此它等效于此:
System.out.println("a==b? apple2e" == "apple2e");
我认为这不是您要测试的内容!
另一方面,这将为您提供两个单独的String
实例:
String a = new String("apple2e");
String b = new String("apple2e");
System.out.println("a==b? " + (a == b)); // "a==b? false"
示意性地看起来像
a (reference_id 123) --------------- "apple2e"
b (reference_id 456) --------------- "apple2e"
可以使用以下方法还原为原始情况String#intern()
:
String a = new String("apple2e").intern();
String b = new String("apple2e").intern();
System.out.println("a==b? " + (a == b)); // "a==b? true"
例如
a (reference_id 123) ------+
+--------- "apple2e"
b (reference_id 456) ------+
解决方法
我知道已经解决了这个问题,但是我在SO上看到了不一致的论点。
所以,如果我有:
String a = "apple2e";
String b = "apple2e";
System.out.println("a==b? " + a == b);
我得到 FALSE 。
据我了解,这是因为a
和b
是对同一对象(apple2e
)的两个不同引用。
所以我会有类似的东西:
a (reference_id 123) ------
--------- "apple2e"
b (reference_id 456) ------
现在,如果我只想比较两个字符串的 内容 ,我将使用a.equals(b)
这是否意味着如果两个引用指向同一个对象,JVM就会简单地返回?因此,它不是在逐个字符地进行比较吗?
谢谢
编辑
拿着电话。感谢delnan
您指出+
优先顺序!!!
当我将其更改为:
System.out.println(a == b);
我确实得到了true
。
这更有意义。
编辑2
我不敢相信我没有抓住。大声笑
我在做:
"a==b? " + a == b
转化为
"a==b? apple2e" == "apple2e"
难怪这是假的!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。