ホームページ  >  記事  >  Java  >  Java パッケージ クラスの比較時に発生した問題の解決

Java パッケージ クラスの比較時に発生した問題の解決

黄舟
黄舟オリジナル
2017-09-29 10:20:321750ブラウズ

いわゆるラッパー クラスの機能は、元のデータ型を参照データ型に変換することです。この記事では、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;
 }

Output


rrreee🎜 パッケージクラスのソースコードを見ると、比較する際にまず型が同じかどうかを判断します。 🎜🎜🎜7. a.equals(1) の場合、int 1 は Integer にパックされます。これは当然 Long とは異なる型です。 🎜🎜🎜🎜rrreee🎜🎜🎜概要: 🎜🎜🎜🎜🎜自動アンパック/パッキングを使用する場合、パッケージング クラス間の比較は自動的にアンパックされず、アドレス比較となり、結果に影響を与えるキャッシュが存在します。 🎜🎜🎜パッケージングクラスのequalsメソッドを使用して比較する場合、パッケージングクラスは型を自動変換しないため、型が異なる場合、値が同じであってもfalseが返されます。したがって、ラッパークラスで値を比較する場合は、「==」を使用せず、同じ型であることに注意するか、基本データ型を直接使用して比較してください。 🎜

以上がJava パッケージ クラスの比較時に発生した問題の解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。