Java 中的“==”與“equal()”
阿新 • • 發佈:2021-01-22
技術標籤:java
在Java中,“==”與equal是一對容易混淆的概念,到底他們有什麼區別、什麼時候用==,而什麼時候又應該用equal()呢?
首先說一下,Java中的變數按照資料型別來分可以分為基本資料型別(如:byte,short,char,int,long,float,double等)和引用資料型別(類、介面、陣列)。
對於“==”而言:
一般“==”左右兩邊用的是基本資料型別,實際上其會判斷左右兩邊對應的ASCII值是否相等,相等則返回true. 而equal方法是不能用於這些原始資料型別的。
而若“==”接的是引用型別(如兩邊是物件、或陣列名),其比較的是地址值,即左右兩邊的地址是否指向同一個物件。是則返回true。所以若“==
則其是用來判斷左右兩邊是否為同一個物件。在這裡有一個特別的,即String資料型別,其屬於引用型別。但其用“==”判斷時有兩種情況,如下面的程式碼圖所示:
若是使用基本資料型別的方法賦值,a==b為true,即它們指向的是同一個物件。而若使用new的方法新建物件是,此時a==b為false,也就是說a與b為兩個不同的物件。
@Test
public void test() {
String a="123";
String b="123";
System.out.println(a==b); //true
String c=new String("123");
String d=new String("123");
System.out.println(c==d);//false
}
對於equal方法而言:
其實所有的的類都直接後間接繼承自Object類。Object類中equal方法的定義如下:
public boolean equals(Object obj) {
return (this == obj);
}
可以看到其用的就是“==”,也就是說,如果你不在類中重寫equal方法,那你使用的實際上就是“==