Java中==和.equals之间的区别.
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中==和.equals之间的区别.,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
![Java中==和.equals之间的区别.](/upload/InfoBanner/zyjiaocheng/766/a1269861abf14bf98ad0a7e4be65a3e7.jpg)
我知道这已被覆盖,但我在SO上看到了不一致的论点.
所以,如果我有:
String a = "apple2e";
String b = "apple2e";
System.out.println("a==b? " + a == b);
我搞错了.
据我了解,这是因为a和b是对同一个对象的两个不同引用(apple2e).
所以我会有类似的东西:
a (reference_id 123) ------
--------- "apple2e"
b (reference_id 456) ------
现在,如果我只想比较两个字符串的内容,我会使用a.equals(b)
这是否意味着如果两个引用指向同一个对象,JVM只是返回?那么它不是真的在进行逐字符比较吗?
谢谢
编辑
拿着电话.感谢delnan指出优先权!
当我将其更改为:
System.out.println(a == b);
我的确是真的.
这更有意义.
编辑2
我简直不敢相信.大声笑
我在做:
"a==b? " + a == b
这转化为
"a==b? apple2e" == "apple2e"
难怪这是假的!!
解决方法:
As I understand it, it’s because a and b are two different references to the same object (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打印它的功能.第一个sysout只打印“false”,因为string concatenation()的优先级高于==,所以它等效于:
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) ------+
内容总结
以上是互联网集市为您收集整理的Java中==和.equals之间的区别.全部内容,希望文章能够帮你解决Java中==和.equals之间的区别.所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。