2017-02-06 4 views
2

今日、私はequals()を使って2つの配列を比較しようとしましたが、明らかに失敗しました。digginなどを始めました。そして、いくつかの研究の後で、配列のクラスが作成されている時点はいつですか?私はint [] aが整数の配列クラスの作成につながることを知っています。誰がそれを作成しますか? Object.equals()をオーバーライドすることが不可能なので、2つのオブジェクトを比較せず、配列の要素を比較するのはなぜですか?誰かがリンクを説明したり提供することができれば、それを理解するのに役立つだろうと非常に感謝しています。Javaでどの時点で配列クラスが作成されていますか?

+0

['Arrays.compare()'](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#equals(int []、%20int)を使用してください。 []))それを行う –

+0

"2つのオブジェクトを比較せず、代わりに配列の要素を比較するようにObject.equals()をオーバーライドすることはなぜ不可能でしたか?それは不可能ではありませんでした、それは単に行われていませんでした。今我々は、これらのセマンティクスに頼っているので、コードに依存しないようにしています。 –

+0

@sharonbn私は今それを知っています、それは質問ではありません –

答えて

1

Arrayは、Objectクラスのequals()をオーバーライドしません。
equals()が配列に対して呼び出されたときに保持するオブジェクトのメソッドequals()は使用されません。

整数の2つの配列を比較する場合は、Arrays.equals()メソッドを使用できます。
それがあなたに合わない場合は、2つの整数の配列を比較する独自のメソッドを作成します。

しかし、配列のequals()をオーバーライドすることはできません。クラスは最終的なものであり、それはむしろ奇妙なアプローチのようです。

+0

配列クラスをオーバーライドする必要はありません。なぜなら、Java開発者(Oracleまたは誰でも)がObject.equals()をオーバーライドしなかった理由を知りたいのですが、 –

+0

はすべてのクラスが派生するので副作用があります。 – davidxxx

+2

「すべてのクラスはそれから派生します」そうではありません。 –

関連する問題