1. 程式人生 > >Java筆記--equals和==

Java筆記--equals和==

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將會使用常量池

來管理這些字串;當使用new String(“hello”)時,JVM會先使用常量池來管理”hello”直接量,再呼叫String類的構造器來建立一個新的String物件,新建立的String物件被儲存在堆記憶體中,即new String(“hello”)一共產生了兩個字串物件。

常量池(constant pool):專門用於管理在編譯時被確定並被儲存在已編譯的.class檔案中的一些資料。它包括了關於類,方法,介面中的常量,還包括字串常量。JVM常量池保證相同的字串直接量只有一個,不會產生多個副本

將類中的equals方法重寫,可以根據判斷物件中的變數是否相等來判斷相等