[解決済み] Java の NULL チェックで .equals() の代わりに == を使用する理由
2022-06-07 16:43:37
疑問点
Javaでは、NULLチェックを行う場合、.equals()の代わりに==を使うべきだと言われました。これにはどのような理由があるのでしょうか?
どのように解決するのですか?
この2つは全く別のものです。
==
は、変数に含まれるオブジェクト参照があればそれを比較します。
.equals()
は二つのオブジェクトが
等しい
であるかどうかを確認します。2つの異なるオブジェクトのインスタンスが、その契約に従って "等しい" になることは完全に可能です。さらに、細かい点ですが
equals
はメソッドなので、もしそれを
null
の参照で呼び出そうとすると
NullPointerException
.
例えば
class Foo {
private int data;
Foo(int d) {
this.data = d;
}
@Override
public boolean equals(Object other) {
if (other == null || other.getClass() != this.getClass()) {
return false;
}
return ((Foo)other).data == this.data;
}
/* In a real class, you'd override `hashCode` here as well */
}
Foo f1 = new Foo(5);
Foo f2 = new Foo(5);
System.out.println(f1 == f2);
// outputs false, they're distinct object instances
System.out.println(f1.equals(f2));
// outputs true, they're "equal" according to their definition
Foo f3 = null;
System.out.println(f3 == null);
// outputs true, `f3` doesn't have any object reference assigned to it
System.out.println(f3.equals(null));
// Throws a NullPointerException, you can't dereference `f3`, it doesn't refer to anything
System.out.println(f1.equals(f3));
// Outputs false, since `f1` is a valid instance but `f3` is null,
// so one of the first checks inside the `Foo#equals` method will
// disallow the equality because it sees that `other` == null
関連
-
エラー java.util.NoSuchElementException
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
IllegalArgumentException この例外を解決する方法
-
javaで非静的な解を静的な参照にすることができない
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
自動配線された依存性のインジェクションに失敗しました。
-
javaでクラスを作成すると、enclosing classでないように見える
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
java 例外。Javaツールの初期化
-
JSPで「リストが型解決できない!」の解決方法