いわゆるラッパー クラスの機能は、元のデータ型を参照データ型に変換することです。この記事では、Java ラッパー クラスを比較するときに発生する問題の解決策を主に紹介します。必要な場合はそれを参照してください。以下を見てみましょう。
はじめに
この記事では主に、Java パッケージング クラスを比較する際に発生するいくつかの問題の解決策を紹介し、参考と学習のために共有します。以下では多くのことを説明しません。詳細を見てみましょう。それを紹介します。
例 1:
Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e= 321; Integer f= 321; Long g = 3L; System.out.println(c == d); //1 System.out.println(e == f); //2 System.out.println(c == (a+b)); //3 System.out.println(c.equals(a+b));//4 System.out.println(g == (a+b)); //5 System.out.println(g.equals(a+b)); //6
出力結果
true false true true true false
1. パッケージ化タイプの比較は自動的に解凍されませんが、-128 から 127 までの数値を保存するための Integer のキャッシュが存在します。つまり、cとdのアドレス値は同じになります。
2. アドレス値の比較、キャッシュは使用しません
3. 「==」の場合、右側で自動アンパックが行われるため、比較時に実際にアンパックされるのは int 値です
4. a +b を int に入力し、自動パッケージ化のために Integer の equals メソッドを渡します。値の比較は、equals メソッド内にあります。
5. 比較のために基本データ型に解凍されます
6. パッケージ化クラスの equals によって型が決定されます。一致しない場合は false を返します。 Long.equals(Object object)
中判断类型不符合,返回false。
例2:
Long a = 1L; Integer b = 1; System.out.println(a.equals(1)); //7 System.out.println(a.equals(1L)); System.out.println(a.equals(b));
输出
false true false
看包装类源码会发现比较时会先去判断类型是否相同。
7.a.equals(1)
例 2:
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
a.equals(1)
の場合、int 1 は Integer にパックされます。これは当然 Long とは異なる型です。 🎜🎜🎜🎜rrreee🎜🎜🎜概要: 🎜🎜🎜🎜🎜自動アンパック/パッキングを使用する場合、パッケージング クラス間の比較は自動的にアンパックされず、アドレス比較となり、結果に影響を与えるキャッシュが存在します。 🎜🎜🎜パッケージングクラスのequalsメソッドを使用して比較する場合、パッケージングクラスは型を自動変換しないため、型が異なる場合、値が同じであってもfalseが返されます。したがって、ラッパークラスで値を比較する場合は、「==」を使用せず、同じ型であることに注意するか、基本データ型を直接使用して比較してください。 🎜以上がJava パッケージ クラスの比較時に発生した問題の解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。