java中字符串相等判斷


 

字符串的判斷有2種:

        1、判斷地址是否相等  用:==

        2、判斷值是否相等  用:equals方法

 

Object類作為所有類的超類,而Object類的equals方法是直接比較地址的,源碼如下:

public boolean equals(Object obj)  
   {  
       return this == obj;  
   }

所以,在String類中的equals方法,是重寫了Object類的equals方法的,String類的equals方法源碼如下:

public boolean equals(Object anObject){

    if(this==anObject){        //比較地址,如果地址相等,直接返回true

        return true;

    }

    if(anObject instanceof String){        //如果地址不相等,那就比較類型,如果類型不相等,直接返回false

        String anotherString =(String)anObject;    //由於是String類的比較,所以要把對象強轉為String類

        int n=value.length;        //記錄當前對象的字符長度

        if(n==anotherString.value.length){    //判斷當前對象的字符串長度和傳入的字符串長度是否一樣,不一樣,直接返回false,如果一樣,接着往下比較

            char v1[]=value;    

            char v2[]=anotherString .value;

            int i=0;

            while(n-- !=0){        //將2個字符數組的循環對比

                if(v1[i] !=v2[i])    //將字符數組的字符進行對比

                    return false;    //如果出現一個字符不同,馬上返回false

                i++

            }

            return true;

        }

    }
    

    return false;

}

 

String類的equals比較內容相同思路如下:

  1、先判斷地址是否相等,相等返回true

  2、比較類型是否一樣,不一樣,返回false

  3、將傳入的對象強轉為String,比較長度,長度不相等,返回false

  4、長度相等,循環比較字符數組的元素,當有一元素比較內容不相同,馬上返回false

  5、2個字符數組循環比較所有元素,沒有內容不相同的元素,返回true

 

測試代碼如下:

public class TestString {
    public static void main(String[] args) {
        String str="abc";
        String str2=new String("abc");   
        System.out.println("兩個對象的內存地址是否相等:"+(str==str2));//false
        /**比較對應位置上的字符是否相等,如果所有的對象位置上的字符均相等,true,否則返回false*/
        System.out.println("兩個對象的內容是否相等:"+(str.equals(str2)));
        
        
        //以下結果為 false  
        /**因為Person對象 instanceof String  的結果為false ,直接返回false*/
        System.out.println("String對象與Person對象的內容是否相等:"+(str.equals(new Person())));
    }
}
class Person{
    
}

水平有限,還請多多指教!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM