java ==與equals的區別(二)
阿新 • • 發佈:2021-01-23
java ==與equals的區別
本文主要是針對int,Integer 之間的==與equals進行比較
當將i的值設定為40時,注意:40在[-128,127]範圍內 public class test20210122_002 { public static void main(String[] args) { objPoolTest(); } public static void objPoolTest() { int i = 40; int i0 = 40; Integer i1 = 40; Integer i2 = 40; Integer i4 = new Integer(40); Integer i5 = new Integer(40); System.out.println(i == i0); //true i和i0均是普通型別的變數,所以資料直接儲存在棧中,棧中的資料可以共享。當定義了int i = 40; 再定義int i0 = 40;時會自動檢查棧中是否有40這個資料,如果有,i0會直接指向i的40,不會再新增一個新的40。 System.out.println(i == i1); //true 當int和 Integer進行==比較的時候,Integer 會自動拆箱變成int,最終比較的是兩者的值是否相同。 System.out.println(i == i2); //true System.out.println(i == i4); //true 當int和 Integer進行==比較的時候,Integer 會自動拆箱變成int,最終比較的是兩者的值是否相同。 System.out.println(i == i5); //true System.out.println(i1 == i2); //true 當i1=40時在[-128,127]範圍內會首先查詢常量池裡面有沒有40,由於沒有找到就將40存在常量池,當i2=40在[-128,127]範圍內也會查詢常量池裡面有沒有40,此時就可以查詢到40了,就直接指向i1指向的那個40了。 System.out.println(i1 == i4); //false 由於i4不想在常量池裡面查詢,想直接建立新的物件,所以i4和i5都是新建立的各自獨一無二的物件,與i1和i2都不一樣。 System.out.println(i1 == i5); //false System.out.println(i4 == i5); //false } }
當將i的值設定為240時,注意:240不在[-128,127]範圍內
public class test20210122_002 { public static void main(String[] args) { objPoolTest(); } public static void objPoolTest() { int i = 240; int i0 = 240; Integer i1 = 240; Integer i2 = 240; Integer i4 = new Integer(240); Integer i5 = new Integer(240); System.out.println("i==i0\t" + (i == i0)); //true i和i0均是普通型別的變數,所以資料直接儲存在棧中,棧中的資料可以共享。當定義了int i=240; 再定義int i0 = 240;時會自動檢查棧中是否有240這個資料,如果有,i0會直接指向i的240,不會再新增一個新的240。 System.out.println("i==i1\t" + (i == i1)); //true 當int和 Integer進行==比較的時候,Integer 會自動拆箱變成int,最終比較的是兩者的值是否相同。 System.out.println("i==i2\t" + (i == i2)); //true System.out.println("i==i4\t" + (i == i4)); //true 當int和 Integer進行==比較的時候,Integer 會自動拆箱變成int,最終比較的是兩者的值是否相同。 System.out.println("i==i5\t" + (i == i5)); //true System.out.println("i1==i2\t" + (i1 == i2)); //false 當i1=240時不在[-128,127]範圍內就不再考慮常量池了,就會直接建立新的物件,同理i2=240也建立了新的物件,所以i1和i2都是新建立的各自獨一無二的物件。 System.out.println("i1==i4\t" + (i1 == i4)); //false 由於i4不想在常量池裡面查詢,想直接建立新的物件,所以i4和i5都是新建立的各自獨一無二的物件,與i1和i2都不一樣。 System.out.println("i1==i5\t" + (i1 == i5)); //false System.out.println("i4==i5\t" + (i4 == i5)); //false } }