天天看點

旋轉跳躍-學會操作String類資料 | 帶你學《Java面向對象程式設計》之二十七

上一篇:初識Java神秘成員:String類 | 帶你學《Java面向對象程式設計》之二十六

【本節目标】

通過閱讀本節内容,你将初步掌握字元串資料比較的方法,并通過使用匿名String對象避免null值異常問題的出現。

字元串比較

首先來回顧一下,如果說現在要想判斷兩個int型變量是否相等,那麼肯定使用“==”來完成,這個是由程式直接提供的比較相等的運算符。

範例:進行“==”比較

public class StringDemo {
    public static void main (String args[]) {
        int x = 10;
        int y = 10 ;
        System.out.println(x == y) ;  //true
    }
}           

但是String類實際上也牽扯到一個相等的判斷問題,但是對于String類相等的判斷也可以使用“==”,隻不過判斷的不準确而已。下面通過代碼來觀察。

範例:實作字元串的相等判斷

public class StringDemo {
    public static void main (String args[]) {
        String strA = “mldn” ;
        String strB = new String(“mldn”) ;
        System.out.println(strA == strB) ;      //執行結果為false
    }
}           

此時的比較并沒有成功,雖然兩個字元串對象的内容是相同的,但是“==”也無法得到準确的相等判斷,那麼這種情況下如果要想實作準确的字元串相等判斷,那麼可以使用String類中所提供的一個比較方法:

  • 字元串比較(有變形):public boolean equals(String str);

範例:利用equals()實作字元串比較

public class StringDemo {
    public static void main (String args[]) {
        String strA = “mldn” ;
        String strB = new String(“mldn”) ;
        System.out.println(strA.equals(strB)) ;      //執行結果為true
    }
}           

面試題:請解釋String比較中“==”與equals()的差別?

  • “==”:進行的是數值比較,如果用于對象比較上比較的是兩個記憶體的位址數值;
  • equals():是類所提供的一個比較方法,可以直接進行字元串内容的判斷。

字元串常量

字元串常量是String類的匿名對象

現在已經清楚了String類的基本操作形式,但是需要做出一個明确的定義,在程式的開發之中任何的一個整數是int型,任意的小數預設都是double,但是對于字元串而言,首先程式之中不會提供有字元串這樣的基本資料類型,那麼可以提供的隻有一個String類,是以任何使用“"”定義的字元串常量實際上描述的都是一個String類的匿名對象。

以String strA= “mldn” ;為例:

記憶體分析圖:

旋轉跳躍-學會操作String類資料 | 帶你學《Java面向對象程式設計》之二十七

圖一 記憶體分析圖

所謂的String類對象的直接指派直接描述的是,将一個匿名對象設定一個具體的引用名字。

範例:觀察匿名對象的存在

public class StringDemo {
    public static void main (String args[]) {
        String str = “mldn” ; 
        System.out.println(“mldn”.equals(str)) ;     //執行結果為true
    }
}           

此時可以發現字元串常量已經可以明确的調用equals()方法實作對象相等的判斷,是以可以得出一個結論:程式中的确沒有字元串的常量這種基本類型,有的隻是String類的匿名對象。

關于對象相等判斷的小技巧:

在以後進行項目開發的時候,如果現在某些資料是由使用者輸入,并且要求這些資料為一個指定内容的情況下建議将字元串的一個常量寫在前面。

接收使用者輸入資料的字元串調用方法:

public class StringDemo {
    public static void main (String args[]) {
        String input= null ;              //使用者輸入内容
        System.out.println(input.equals(“mldn”)) ;     
    }
}             //Exception in thread “main”java.lang.NullPointerException           

換個方式,将字元串常量寫在前面:

public class StringDemo {
    public static void main (String args[]) {
        String input= null ;          //使用者輸入内容
        System.out.println(“mldn”.equals(input)) ;       //執行結果false
    }
}           

equals()方法裡面提供有一個可以回避null的判斷,是以如果将字元串常量寫在前面,那麼調用equals()方法的時候永遠都不可能出現“NullPointerException”,字元串是一個匿名對象,匿名對象一定是開辟好堆記憶體空間的對象。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:領會String類誕生的奧妙 | 帶你學《Java面向對象程式設計》之二十八 更多Java面向對象程式設計文章檢視此處