1. 程式人生 > 其它 >java ==與equals的區別(二)

java ==與equals的區別(二)

技術標籤:Java面試Java知識java

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

    }

}