Java中==和.equals之间的区别.
我知道这已被覆盖,但我在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" 难怪这是假的!! 解决方法
由于字符串实习,并且仅因为字符串内部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代码
- java – 如何将第三方类对象用作Hashmap键?
- java – 无法在终端中找到XML架构名称空间错误的
- java – 使用Spring框架单例bean进行单元测试
- Java中抽象类和接口的区别_动力节点Java学院整理
- 我可以动态制作正在运行的Java Swing应用程序的视
- 如何在java中使用Http,Socks4和Socks5代理?
- java – Hibernate:手动调用SequenceGenerator?
- Hibernate hibernate.default_schema属性:指定默
- java – 渲染android.support.design.widget.Coo