整数と整数

参考ブログ1

参考ブログ2

1.整数と整数の違い

  1. 整数はintのパッケージ化クラスであり、intは8つの基本データ型の1つです。
  2. 整数はクラス、デフォルト値はnull、intデフォルト値は0
  3. 整数はオブジェクトを表し、参照を使用してこのオブジェクトを指します。一方、整数は値を直接格納する基本的なデータ型です。

2.整数の自動ボックス化解除とボックス
化自動ボックス化解除とボックス
jdk1.5以降の関数です。ボックス化は基本的なデータ型をクラスにカプセル化するプロセスであり、ボックス化解除はその逆です。
ボクシング:
通常の作成クラスのオブジェクトは新しいですが、Integerクラスは直接することができます

Integer a=11;

逆コンパイルツールを使用すると、クラスファイルが次のようになっていることがわかります。

Integer a = Integer.valueOf(11);

11は基本的なデータ型であり、整数クラスに解析されます。
ボックス化解除:

int m=a;

逆コンパイルされたクラスファイル

int m=a.intValue();

3。「==」とequals()について

Integerクラスでは、「==」を使用してオブジェクトアドレスが同じかどうかを比較し、Integerクラスはequals(Object obj)メソッドをオーバーライドします。equals(Object obj)メソッドでは、最初にオブジェクトが同じかどうかを判断します。パラメータ内のobjは整数です。このタイプのオブジェクトの場合、値が同じか、値が同じか、trueを返すか、値が異なるか、falseを返すかどうかが判断されます。objがIntegerクラスのオブジェクトの場合、falseを返します。パラメータが基本型intの場合、コンパイラは自動的にintを整数クラスにボックス化してから比較することに注意してください。
コードを見る

public static void main(String[] args) {
    
     
   Integer i = 10;  
   Integer j = 10;   
   System.out.println(i == j);         
   Integer a = 128;
   Integer b = 128;   
   System.out.println(a == b);        
    int k = 10;    
    System.out.println(k == i);    
    int t = 128;    
    System.out.println(t == a);         
    Integer m = new Integer(10);   
    Integer n = new Integer(10);    
    System.out.println(m == n);
}

まず、整数i = 10を直接宣言すると、自動的に整数i = Integer.valueOf(10)にボックス化されます
。kとiが比較されると、整数iは自動的にi.intValue()としてボックス化解除され、2つの値が比較されます。サイズ。

最初の宣言は真です。 "=="はアドレスを比較します。i> =-128およびi <= 127の場合、最初の宣言はiの値をキャッシュに入れ、2回目はiの値をキャッシュから直接取得するためです。キャッシュIngeterオブジェクトを再作成する代わりに、内部のデータ。次に、i = 10がキャッシュの範囲内にあるため、最初の印刷結果はtrueになります。

2番目はfalseで、128は-128と127の間にないため、オブジェクトが最初に作成されたときにキャッシュがなく、新しいIntegerオブジェクトが2回目に作成されます。したがって、印刷結果は誤りです

3番目と4番目はすべて真であり、Integerは自動的にボックスを解除し、2つの基本的なデータ型を比較します。

5つ目はfalseで、2つのオブジェクトが新しいものから出てきます。キャッシュの概念はありません。もちろん、==と比較するのは誤りです。

おすすめ

転載: blog.csdn.net/weixin_46064382/article/details/106886795