String類型的比較(為什么比較字符串是否相等時不用=號用equals()的)


class StringDemo {
    public static void main(String[] args) {
        char[] msg = {'h','e','l','l','o'};
        String t1 = "hello";
        String t2 = new String("hello");
        String t3 = new String(msg);
        String t4 = t3;
        String t5 = "hello";
        System.out.println(t1==t2);//false
        System.out.println(t2==t3);//false
        System.out.println(t3==t4);//true
        System.out.println(t5==t1);//true

        System.out.println(t1.equals(t1));//true
        System.out.println(t1.equals(t2));//true
        System.out.println(t1.equals(t3));//true
        System.out.println(t1.equals(t4));//true
        System.out.println(t1.equals(t5));//true
    }
}


new 出來的String類型和t1這種“常亮型”聲明不同,在內存上也放在的不同的地方,在Java中String里面的=判斷,是在內存地址上是不同的,不是同一個對象,=比較的就是不是同一個對象。任何new出來的類型變量都不會“相等”。

Java中存在一個串池,

s和s1引用的是同一個字符串對象.


String s = "hello";
String s1 = "hello";

這兩句只會創建一個"hello"字符串放入串池里面,s和s1只是這個字符串的兩個引用而已.


用oop來解釋的話:

java中的==是用來判斷對象所使用的內存地址是不是同一個,進而判斷是不是同一個對象。例如 objA == objB
注意這里是同一個對象才會是true,如果不是同一個對象,哪怕兩個對象所有屬性都相同也會返回false。

而equals則是一個方法,你可以為自己的類編寫equals方法來判斷是不是相等。這里String類就提供了equals方法來判斷兩個String對象是不是相同,而不是去判斷兩個String對象是不是同一個對象,因為我們一般使用中,只關心兩個字符串內容相同與否,而不會關心是不是同一個對象。


免責聲明!

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



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