string是什麼型別的?

string是什麼型別的?JAVA破局之路2020-03-12 17:10:32

關於“==”

在Java語言中,當用“==”匹配時,就是比較兩個記憶體單元的內容是否一樣。

如果是基本型別byte、boolean、short、char、int、float、double,就是直接比較的他們的值。

如果是引用型別,比較的就是引用的值,“引用的值”可以被認為是物件邏輯地址。如果引用型別用“==”就是比較的兩個物件的地址是否相同。

那麼為什麼例子中a與b指向了同一個記憶體單元?

這就是JVM的“編譯時最佳化”,當編譯器在編譯程式碼:String a = “a” + “b” + “2”; 時,會將其編譯為,String a = “ab2”; 。因此 a == b 為true。

關於equals()

說到 “==” 不得不說一下equals()。

equals()是在Object類中被定義的,它的定義中就是使用 == 來匹配,也就是說如果不重寫equals() 比較的也是引用地址。

equals()的存在就是為了希望子類去重寫,用於比較值,不去比較引用地址。

String 類中的就是重寫了equals(), 如下:

所以我們在比較String時都是用了equals()方法。

總結

“==” 基本型別比較值,引用型別比較引用地址。

String “+” 操作 JVM編譯時會做最佳化。

equals()方法,不重寫比較的也是引用地址。