1. 程式人生 > 實用技巧 >Java面試題(1):詳解int與Integer

Java面試題(1):詳解int與Integer

Java面試題(1):詳解int與Integer

int與Integer的區別

  • int是Java的基本資料型別之一,Integer是int的包裝類

  • int直接再記憶體中儲存值,Integer進行new操作,實際是生成了一個物件

  • int的預設值為0,Integer的預設值為null

  • Integer必須例項化(賦值)後才可以使用,而int無需例項化

int與Integer的比較

Integer i = new Integer(200);生成方式簡稱為new Integer

Integer i = 200;生成方式簡稱為Integer

  1. int與int比較,數字一樣為true

  2. int與Integer,int與new Integer比較,數值一樣結果均為true

// int與Integer,new Integer比較
// int與Integer比較,Integer會自動拆箱為int
int i1 = 200;
//相當於Integer i2 = Integer.valueOf(200); //自動裝箱
Integer i2 = 200;
Integer i3 = new Integer(200);
//自動拆箱後和i1進行比較
System.out.println(i1 == i2);	//true
System.out.println(i1 == i3);	//true
  1. new Integer與new Integer比較,數字一樣結果均為false
//生成的物件在堆中是不同的物件,所以數值相同也為false
Integer i1 = new Integer(200);
Integer i2 = new Integer(200);
System.out.println(i1 == 12);	//false
  1. 非new生成的Integer之間比較分兩種情況:

-128 <= i <= 127,非new生成的Integer之間比較數字相同時,結果為true

Integer i1 = -128;
Integer i2 = -128;
System.out.println(i1 == i2);	//true

i 不在這個區間內,非new生成的Integer之間比較數字相同時,結果為false

Integer i1 = -129;
Integer i2 = -129;
System.out.println(i1 == i2);	//false
  1. new Integer與非new Integer比較,數值一樣結果均為false

非new Integer在-128~127中,會通過valueOf指向常量池中

非new Integer不在-128~127中,相當於new Integer,是一個物件

new Integer會指向堆中,均為物件,地址不同,所以均為false

Integer i1 = 100;
Integer i2 = new Integer(100);
System.out.println(i1 ==i2);	//false

知識點掃盲

  1. 自動裝箱與自動拆箱

自動拆箱:把包裝類型別轉換為基本型別

自動裝箱:把基本型別轉換為包裝類型別

  1. -128-127的特殊性

i >= -128 並且 i <= 127 的時候,程式碼中的 if 條件成立,Integer i1 = 100,將 i 的值放入快取中,Integer i2 = 100直接取快取裡面的資料,而不是重新建立一個Ingeter 物件,所以兩個Integer i = 100相比為true;

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
       return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

作者: Neumann97
出處:https://www.cnblogs.com/dream-by-dream/p/13637628.html
版權:本文采用「署名-非商業性使用-相同方式共享 4.0 國際」知識共享許可協議進行許可。
歡迎轉載,轉載請註明出處!