1. 程式人生 > 其它 >java語言中“==”和“equals”方法的區別

java語言中“==”和“equals”方法的區別

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方法的示例就不展開解釋了。