我知道==比较两个对象是否相同,.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 基元。