ホームページ  >  記事  >  Java  >  Javaのintとintegerの違い

Javaのintとintegerの違い

王林
王林転載
2019-11-30 17:24:422817ブラウズ

Javaのintとintegerの違い

1. Java の基本データ型とそのカプセル化クラス

Javaのintとintegerの違い

javaデータ型には基本データ型と参照データ型があり、基本データ型をオブジェクトとして処理しやすくするために、Java では基本データ型に対応するカプセル化クラスが導入されています。たとえば、int カプセル化クラスは Integer です。

オンライン教育ビデオ共有: java 教育ビデオ

2. Java の自動開梱と自動梱包

# #1 . 自動ボックス化

#自動ボックス化は、実際には基本データ型を参照データ型 (オブジェクト) に変換することです

#2. 自動ボックス化解除

自動ボックス化解除実際には、参照データ型を基本データ型に変換しています

コードは次のとおりです:

    public static void main(String[] args) {
        Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1);

        int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1
        System.out.println(a);
        System.out.println(b);
    }

印刷結果:

1
0

3. int と Interger の違い

上記のことから、int と Interger の違いがわかります。

int は基本データ型で、Integer は参照データ型です。

## デフォルト#int の値は 0、Integer のデフォルト値は null です。

int 型は値を直接格納し、Integer はオブジェクトをインスタンス化し、オブジェクトのアドレスを指す必要があります。

そういえば、それだけだと思いませんか?実は、両者には次のような細かい違いがあります:

    public static void main(String[] args) {
        Integer a = new Integer(1);
        Integer b = new Integer(1);

        int c = 1;
        int d = 1;

        Integer e = 1;
        Integer f = 1;
        
        Integer g = 130;
        Integer h = 130;
        
        Integer i = new Integer(130);
        int j = 130;
    }

1: a == b?ナンセンス、絶対に平等ではない。 2 つの新しいオブジェクトのアドレスは異なります。

2: c == d?これもナンセンスで、基本データ型の値は等しくなければなりません。

3: ここでの重要な質問は、e == f? です。 g == h?

答えは、e == f; g != hです。

なぜこのようなことが起こるのでしょうか? ava がコンパイルされると、Integer g = 130 は Integer.valueOf(130) にコンパイルされるため、これはクラス ファイルを逆コンパイルすることで確認できます。 Integer ソース コードから、Integer.valueOf() メソッドは値 -128 ~ 127 の間の整数をキャッシュし、新しい整数を作成しないため、値 2 が のとき e==f; であると結論付けることができます。 127 より大きいか小さい - 128 で新しいものが作成されるため、g != h になります。

Integer の valueOf メソッドは次のとおりです:

    public static Integer valueOf(int i) {
         //IntegerCache.low == -128  ;IntegerCache.high == 127
         //当数值大于-128小于127时,进行缓存;否则重新new一个。
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
4: c == e, i == j ですか?

答えはすべて等しいです。なぜなら、カプセル化されたクラスと基本的なデータ型を比較す​​るとき、Java は自動的にそれらをボックスから取り出して、値が等しいかどうかを比較するからです。

概要:

1. これらはすべてカプセル化されたクラスであり、すべて new から派生しているため、まったく同じではありません。オブジェクトのメモリアドレスが異なるためです。

2. これらはすべてカプセル化されたクラスであり、new から派生したものではありません。値が -128 ~ 127 の場合は等しく、それ以外の場合は等しくありません。

3. カプセル化されたクラスと基本型を比較す​​る場合、値が等しい限りは等しく、そうでない場合は等しくありません。カプセル化されたクラスと基本データ型を比較す​​るときに、自動的にボックス化解除操作が行われるためです。

4. これらはすべて基本的なデータ型であり、値が等しい場合は等しい、そうでない場合は等しくありません。

さらに関連するチュートリアルについては、次のサイトを参照してください:

Java 入門

以上がJavaのintとintegerの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。