1.“==”運算子是用來比較兩個變數的值是否相等,如比較的是參考物件,則比較參考物件的記憶體地址是否相同,也就是是否指向同一個物件,
2.“eqauls”方法僅用于比較參考物件,默認行為是比較參考物件所指向的物件值是否相等,無論參考物件是否指向的統一物件,只要兩個物件的值是相等的,則回傳true,
3.在實際開發中,也會在自定義物件中重寫“eqauls”方法,如果重寫,則自定義物件的比較方法以實際重寫邏輯進行比較,
下面給出代碼示例,并說明具體情況
1 int i=0; 2 int j=0; 3 int k=1 4 System.out.println(i==j);//true 5 System.out.println(i==k);//false
1 Integer i1=new Integer(0); 2 Integer j1=new Integer(0); 3 4 System.out.println(i1==j1);//因物件地址不一樣,回傳false 5 System.out.println(i1.equals(j1));//物件地址不一樣,但兩個物件的值相等,回傳true
4.在此還有一個特殊說明,在java中String是特殊存盤的,因String創建程序對資源消耗較大,java設計時String物件一旦被創建將不允許被修改,如果給字串物件重新賦值,將重新指向另一個新的地址,
1 String s4="0"; 2 String s5=s4; 3 System.out.println(s4==s5);//true 4 s4="1"; 5 System.out.println(s4==s5);//s4被重新賦不同的值,指向不同的地址空間,回傳false
5.如果使用直接賦值法創建兩個String型別變數,賦相同的值,則java機制將會為第一個物件創建具體值并放入“字串常量池”,當第二個物件被賦值時,直接指向“字串常量池”中已有的值,如果使用new String()的方法賦值,則會在記憶體堆為該字串物件創建一塊新的記憶體用于存放值,
1 String s1="0";//創建字串物件的值并放入“字串常量池” 2 String s2="0";//參考“字串常量池”中的已有值 3 String s3=new String("0");//在記憶體堆上創建物件,存放值 4 5 System.err.println(s1==s2);//指向同一個記憶體地址,回傳true 6 System.out.println(s1.equals(s2));//記憶體地址中的值相同,回傳true 7 8 System.out.println(s1==s3);//指向兩個不同的地址,回傳false 9 System.out.println(s1.equals(s3));//兩個不同地址中的值相同,回傳true
6.針對重寫equals方法的示例就不展開解釋了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/287971.html
標籤:Java
