?Java里面有對象和對象的引用的概念,在String方面,==比較的是引用,equals比較的是對象的具體值。




上面的代碼將打印一個false和一個true。這個很容易理解,原因就是s1和s2分別是兩個不同String對象的引用,它們是不一樣的,但是他們指向的String對象的具體值是一樣的。
但是看看下面的情況




會打印出兩個true。為什么會這樣呢?下面是參考別人的解釋:
“因為String太過常用,JAVA類庫的設計者在實現時做了個小小的變化,即采用了享元模式,每當生成一個新內容的字符串時,他們都被添加到一個共享池中,當第二次再次生成同樣內容的字符串實例時,就共享此對象,而不是創建一個新對象,這樣的做法僅僅適合于通過=符號進行的初始化”