gpt4 book ai didi

java - Java 中的运算符重载

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:50 26 4
gpt4 key购买 nike

据我所知的 java 知识,Java 语言中没有运算符重载。那么,为什么这段代码会打印两次“true”?

    String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);

Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1==i2);

最佳答案

== 用于引用类型比较引用; == 用于原始类型比较值。对于您的第一个示例,由于称为字符串池的概念,两个对象引用结果相同。因此在给定的情况下有两个 true。您可能想尝试的另一个代码片段:

String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

因为您一定已经尝试过;它打印出 false 然后是 true。这样做的原因是使用 new 关键字会导致创建一个全新的字符串,即使字符串池中已经存在具有完全相同内容的字符串对象。在这种情况下,s1 现在指向内容为“abc”的驻留字符串(或指向字符串池中的字符串),而 s2 现在指向一个全新的字符串对象(同样内容为“abc”)。因此第一个打印语句中的 false

在第二个 print 语句中,我们正在做的是比较 String 对象的内容而不是它的引用,因为它应该打印 true

这是 Java 语言初学者最常犯的错误之一;当实际导致引用比较时,他们使用 == 进行逻辑比较。阅读此处答案之一中发布的链接,了解有关字符串池的更多详细信息。在相关说明中,String 类“覆盖”了 Object 类的 equals 方法以提供逻辑比较。除非您编写的类没有提供 equals 方法的逻辑实现,否则调用 equals 或使用 == 运算符;结果将是相同的,即引用比较。

要更深入地了解平等,read Brian's article; an excellent read .

关于java - Java 中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com