How does an array's equal method work?

匿名 (未验证) 提交于 2019-12-03 08:59:04

问题:

Hey I'm currently studying for a java final and I am befuddled by a simple equals method.

The question given is

"Given the following array declarations, what does the following print"

and I thought it would be true, false, true however after copy and pasting the code it reveals the answer is false, false, true.

I understand that the == only works when they are the same instance of the object but I do not understand why the first on is false. I tried finding the method in the array api but could not find one with the same arguments.

Forgive me if this is obvious, I've been up late the past couple nights studying and am quite jaded on caffeine at the moment.

int[] d = { 1, 2, 3 }; int[] b = { 1, 2, 3 }; int[] c = d; System.out.println(d.equals(b)); System.out.println(d == b); System.out.println(d == c); 

回答1:

Basically, array types don't override equals to provide value equality... so you end up with the default implementation in Object, which is reference equality.

For value equality in arrays (i.e. equal elements in the same order), use the static methods in the Arrays class.



回答2:

Plain Java arrays (ie, not ArrayList or some such) do not, themselves, implement equals, but rather use the implementation in Object. This is basically just an address compare.

(But note that java.util.Arrays implements some static equals methods for generic arrays.)



回答3:

An Array is an Object and it doesn't override Object.equals(), so the standard implementation of Object.equals() applies. array.equals(something) is true if and only if array == something.



回答4:

Arrays implicitly extend Object class. So, your equals method is inherited from there. The default implementation of equals method just checks the identity equality, i.e. is the same as ==.



回答5:

You are correct that the == operator only compares for reference equality, so the second and third print statements do what you expect.

The .equals method might compare by some other means than reference equality, but that requires the class definition to actually implement that method. If .equals is not implemented in the array class, then the runtime will fall back on Object#equals, which is the same reference equality that you find with the == operator.

In other words, it seems that either there is no .equals method in the backing class for arrays, or it is implemented differently than element-by-element comparison.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!