Java 除了速度之外,还有什么理由使用==over.equals吗?

Java 除了速度之外,还有什么理由使用==over.equals吗?,java,equals,Java,Equals,我在做一个关于两者区别的小研究,我注意到。equals似乎比==更可靠。除了(我假设)速度增加之外,是否有理由使用==over.equals 我做这项研究是因为我在用Java做一些工作。当你考虑其他语言时,比如C语言或C++,会不会有更重要的区别?如果是,你能告诉我为什么吗 编辑:也许我应该澄清一下。当我说.equals更可靠时,我的意思是我想不出一个比较.equals不适合,但很容易想出你应该避免==的情况。有谁能给我一个非常具体的例子,说明什么时候使用==,而不是.equals吗?在Java

我在做一个关于两者区别的小研究,我注意到。equals似乎比==更可靠。除了(我假设)速度增加之外,是否有理由使用==over.equals

我做这项研究是因为我在用Java做一些工作。当你考虑其他语言时,比如C语言或C++,会不会有更重要的区别?如果是,你能告诉我为什么吗


编辑:也许我应该澄清一下。当我说.equals更可靠时,我的意思是我想不出一个比较.equals不适合,但很容易想出你应该避免==的情况。有谁能给我一个非常具体的例子,说明什么时候使用==,而不是.equals吗?

在Java中比较字符串对象时有很大的不同。使用
equals()
将比较字符串的内容并告诉您结果。使用
==
将比较对象,并告诉您变量是否引用同一对象。如果使用
=
,则包含完全相同字符的两个字符串将显示为不相等,因为它们是不同的对象(即,您可以修改其中一个,而另一个将保持不变)。使用
==
来比较
字符串
对象是一个非常常见的错误
equals()
是比较
String
内容的正确方法。

在Java中比较String对象时有很大的不同。使用
equals()
将比较字符串的内容并告诉您结果。使用
==
将比较对象,并告诉您变量是否引用同一对象。如果使用
=
,则包含完全相同字符的两个字符串将显示为不相等,因为它们是不同的对象(即,您可以修改其中一个,而另一个将保持不变)。使用
==
来比较
字符串
对象是一个非常常见的错误
equals()
是比较
String
内容的正确方法。

==检查引用相等性。equals检查值是否相等。所以他们没有真正检查同一件事;==正在测试两个对象是否为同一对象,.equals正在检查它们是否具有相同的值(这就是为什么必须为.equals定义某些操作,并且可以重写它们)

==检查引用是否相等。equals检查值是否相等。所以他们没有真正检查同一件事;==正在测试两个对象是否为同一对象,.equals正在检查它们是否具有相同的值(这就是为什么必须为.equals定义某些操作,并且可以重写它们)

有些基本数据类型不支持.equals,因为所讨论的数据类型在技术上不是类(例如基本布尔或整数)

除此之外,使用==与使用.equals相比,还有一些性能上的差异


话虽如此,在Java中使用“==”而不是.equals通常是一个错误,除非您在.equals方法中检查引用的相等性(如果您来自C/C++世界,请考虑指针的相等性),并且.equals使用类开发人员定义的语义调用equals方法。

嗯,有些原始数据类型不支持.equals,因为所讨论的数据类型在技术上不是类(例如基本布尔或整数)

除此之外,使用==与使用.equals相比,还有一些性能上的差异


话虽如此,在Java中使用“==”而不是.equals通常是一个错误,除非您在.equals方法中。“==”检查引用的相等性(如果您来自C/C++世界,请考虑指针的相等性),和.equals使用类开发人员定义的语义调用equals方法。

是的,可以使用
=
而不是
equals
方法。通常equality方法检查类的常规输出。例如,包含单词“cat”的字符串因此,当你使用相等方法时,它会进行检查。然而,一个类不仅仅是一个字段,而是许多字段以及内存中的一个地址。当对一个类使用
=
时,它会逐字检查它是否指向内存中的同一个实例。只有使用基元类型时,
=
才会执行你认为它会执行的操作。

这是一个非常酷的实验来证明

String a = "123";
String b = "123";
编译器将字符串优化到相同的地址,因此==将返回true。但是,在运行时将b的值更改为123,并且==将返回false,因为现在它们在内存中有一个不同的地址,因为虚拟机不够智能,或者在运行时执行此类优化效率不高

Scanner input = new Scanner(System.in);
b = input.nextLine();

即使输入123,它也会导致==返回false,因为现在它在内存中创建了一个新的位置。

是的,可以使用
=
而不是
equals
方法。通常equality方法检查类的常规输出。例如,包含单词“cat”的字符串因此,当你使用相等方法时,它会进行检查。然而,一个类不仅仅是一个字段,而是许多字段以及内存中的一个地址。当对一个类使用
=
时,它会逐字检查它是否指向内存中的同一个实例。只有使用基元类型时,
=
才会执行你认为它会执行的操作。

这是一个非常酷的实验来证明

String a = "123";
String b = "123";
编译器将字符串优化为相同的地址,因此==将返回true。但是,在运行时将b的值更改为123,并且==将返回false,因为现在它们在内存中有一个不同的地址,因为vi