ホームページ  >  記事  >  Java  >  Javaの整数値の範囲を詳しく解説

Javaの整数値の範囲を詳しく解説

黄舟
黄舟オリジナル
2017-09-09 10:34:243095ブラウズ

この記事では主に JAVA の整数値の範囲のサンプル コードを紹介します。必要な方は参考にしてください。

具体的なコードは次のとおりです。


package com.test;
public class Test {
  public static void main(String []args) {
   Integer a = 100;//此处若使用new,则==值必为false
   Integer b = 100;
   System.out.println(a==b);//true
   Integer c = 150;
   Integer d = 150;
   System.out.println(c==d);//false
  }
}

これは 理由は何ですか?

1. Java がコンパイルされると、Integer a = 100; は Integer a = Integer.valueOf(100);

2 に変換されます。比較するときは、やはりオブジェクトの比較です

3. jdk ソースコードでは


public static Integer valueOf(int i) { 
  final int offset = 128; 
  if (i >= -128 && i <= 127) { // must cache 
  return IntegerCache.cache[i + offset]; //符合值范围时候,进入也创建好的静态IntergerCache,i+offset的值表示去取cache数组中那个下标的值
  } 
  return new Integer(i); //当不符合-128 127值范围时候。记住用的:new,开辟新的内存空间,不属于IntergerCache管理区
}

そして


private static class IntegerCache { 
  private IntegerCache(){} 
  static final Integer cache[] = new Integer[-(-128) + 127 + 1]; //开辟-128到127的内存区。有0的位置哦
  static { 
    for(int i = 0; i < cache.length; i++) 
      cache[i] = new Integer(i - 128); //为内存区的数组每个对象赋值
    } 
  }

ここで、効率を高めるために、Java は整数オブジェクトを -128--127 の間で初期化するため、代入はこの範囲内の同じオブジェクトになります。

もう一文


Integer a = 100;
  a++;
  //这边a++是新创建了一个对象,不是以前的对象。
  public static void main(String []args) {
    Integer a = 100;
    Integer b = a;//此时b指针指向值为100的堆地址 即a的堆地址,a==b成立
    a++;//此时a指向的值发生变化为101,a指针指向101的堆地址。而b任然指向100
    System.out.println(a==b);//false
  }

まとめ

以上がJavaの整数値の範囲を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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