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

时间:2014-01-25 05:24:19

标签: java string equals

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

int x=5;
int y=5;

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

此代码将打印声明。

3 个答案:

答案 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原语。