Java筆記--equals和==
阿新 • • 發佈:2018-11-28
equals和==區別
先上一個簡單的測試程式碼
public class Demo01 {
public static void main(String[] args) {
int i = 65;
float f = 65.0f;
System.out.println("i和f是否相等"+(i==f)); //結果為true
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println("s1與s2是否相等" +(s1==s2)); //結果false
System.out.println("s1與s2是否相等"+(s1.equals(s2)));//結果true
}
}
1:對於i和f,它們屬於基本資料型別,“==”比較它們的數值,結果為true
2:對於s1和s2,它們分別指向兩個通過new關鍵字建立的String物件(此時“==”和“equals”比較的都是物件的地址),因此用“==”比較時s1和s2兩個變數不相等,equals預設比較物件地址,結果為true
hello和new String(“hello”)的區別是什麼?
當java程式直接使用形如“hello”的字串直接量(包括可以在編譯時就計算出的字串值)時,JVM將會使用常量池
常量池(constant pool):專門用於管理在編譯時被確定並被儲存在已編譯的.class檔案中的一些資料。它包括了關於類,方法,介面中的常量,還包括字串常量。JVM常量池保證相同的字串直接量只有一個,不會產生多個副本
將類中的equals方法重寫,可以根據判斷物件中的變數是否相等來判斷相等