Java 中字符串和整数之间的 == 和 .equals() 之间的差异



我知道==比较两个对象是否相同,.equals()比较对象内部的内容是否相同。为什么你可以在 int 上使用 ==,它会比较内容。

int x=5;
int y=5;
if(x==y)
System.out.print("They are equal");

此代码将打印语句。

==在Java中只做一件事;它比较两个值。

如果您谈论的是基元,它会比较它们的值。

int x = 1;
int x2 = 1;
if (x == x2) { ... } 

if将评估为true

int x = 1;
int x2 = 2;
if (x == x2) { ... } 

if条件将评估为false

如果您谈论的是对象引用,它会比较它们包含的引用值。这与被引用的对象的内容无关。它比较被比较的两个变量是否包含相同的引用值(即包含对内存中对象的相同引用)。

MyClass mc1 = new MyClass();
MyClass mc2 = mc1;
if (mc1 == mc2) { .. }

if条件将评估为true

MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass();
if (mc1 == mc2) { .. }

if条件将评估为false

你说,

== 比较两个对象是否相同

但在基元数据类型的情况下,将比较对象的值。

Java 文档数值相等运算符 == 和 != 中提到了它

如果操作数的提升类型为 int 或 long,则为整数 执行相等性测试。

如果升级的类型是浮点型或双精度型,则浮点 执行相等性测试。

你的问题,

为什么你可以在 int 上使用 ==,它会比较内容。

只需仅使用==,就像在基元数据类型上一样,将比较内容。

如果您需要比较两个对象引用的内容,请使用.equals函数,但请记住重载equals函数并提供检查相等性的条件。

两个对象(如字符串)之间的==比较它们是否是同一实例。 另一方面,.equals()比较它们以查看它们是否具有相同的值。

考虑您有一个名为 Point 的类的可能性。点由两个整数 x 和 y 组成,允许移动。我有两个点,A,在(0,0),B,在(1,0)。现在,==.equals()都不会回归。片刻之后,B 移动到 (0, 0)。==仍然是假的,因为我仍然有两个点的实例,它们不一样,但现在.equals()是真的,因为它们具有相同的值(0,0)。

同样,如果要检查两个字符串是否具有相同的值(几乎总是需要),则应使用.equals(),如果要检查两个字符串是否完全相同,则应使用==

==在比较基元数字时表现不同,例如直接整数。==检查它们是否具有相同的值,并且没有检查其标识的等效概念 - 如果您希望具有标识的整数,请考虑使用 Integer 类而不是 int 基元。

最新更新