加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中==和.equals之间的区别.

发布时间:2020-12-15 02:03:53 所属栏目:Java 来源:网络整理
导读:我知道这已被覆盖,但我在SO上看到了不一致的论点. 所以,如果我有: String a = "apple2e";String b = "apple2e";System.out.println("a==b? " + a == b); 我搞错了. 据我了解,这是因为a和b是对同一个对象的两个不同引用(apple2e). 所以我会有类似的东西: a
我知道这已被覆盖,但我在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) ------+

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读