我知道==比较两个对象是否相同,而.equals()比较对象内的内容是否相同。为什么你可以在int上使用==它会比较内容。
int x=5;
int y=5;
if(x==y)
System.out.print("They are equal");
此代码将打印声明。
答案 0 :(得分:4)
==
在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
答案 1 :(得分:1)
你说,
==比较两个对象是否相同
但是在原始数据类型的情况下,会比较对象的值。
在Java Documentation Numerical Equality Operators == and !=
中提及如果操作数的提升类型是int或long,那么是整数 进行相等测试。
如果提升的类型是float或double,那么浮点数 进行相等测试。
你的问题,
为什么你可以在int上使用==它会比较内容。
仅使用==
,就原始数据类型而言,将比较内容。
如果你需要比较两个对象引用的内容,那么使用.equals
函数,但要记住重载equals
函数并提供检查相等性的条件。
答案 2 :(得分:0)
==
比较它们是否是同一个实例。另一方面,.equals()
比较它们以查看它们是否具有相同的值。
考虑你有一个名为Point的类的可能性。点由两个整数x和y组成,并允许移动。我有两个点,A,在(0,0),B,在(1,0)。现在,==
和.equals()
都不会返回true。片刻之后,B移动到(0,0)。 ==
仍然是假的,因为我仍然有两个点实例并且它们不相同,但.equals()
现在是真的,因为它们具有相同的值(0,0)。
同样,如果你想检查两个字符串是否具有相同的值(你几乎总是想要那个),你应该使用.equals()
,如果你想检查两个字符串是否确切,你应该使用==
相同的字符串。
==
在比较原始数字时表现不同,例如直接注入。 ==
是检查它们是否具有相同的值并且没有检查其身份的等效概念 - 如果您想要具有标识的整数,请考虑使用Integer类而不是int原语。