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.包装類と比較して、自動的には解凍されませんが、Integerにはcache記憶-128から127までの数がありますので、cとdのアドレス値は同じです。
      2.住所値を比較して、cacheを使っていませんでした。
      3.'=''の場合、右側で自動的にカバンを外すことが発生しますので、実はint値が比較されています。
      4.a+bの場合は、intに分解し、Integerに伝わるequals方法で自動的にパックします。equalsメソッド内の値の比較です。
      5.基礎データタイプとして取り外す
      6.包装類のequalsはタイプを判断します。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)の場合、int 1はIntegerにパッケージされ、自然とLongとは異なるタイプです。

 public boolean equals(Object obj) {
  if (obj instanceof Long) {
   return value == ((Long)obj).longValue();
  }
  return false;
 }
まとめ:
自動的に包装を外す/包装を使うと、包装類の間で自動的に包装を外すことができなくなります。住所の比較です。中にはキャッシュがあります。結果に影響します。
包装類のequals方式で比較すると、包装類は自動的にタイプを変えられないので、タイプが違っていて、同じ値でもfalseに戻ります。包装類で数値を比較する時は'=''を使わずに、equals方法を使う時はタイプが同じか、それとも直接基礎データタイプで比較するように注意します。
はい、以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持っています。質問があれば、メッセージを残して交流してください。ありがとうございます。