首頁>Club>
13
回覆列表
  • 1 # JAVA破局之路

    關於“==”

    在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()方法,不重寫比較的也是引用地址。

  • 2 # 愛大海的聲音

    Java 中 string 不屬於基本的資料型別,只是代表一個類,是一個引用型別。String是引用型別,不過java有字串常量池機制,宣告字串常量或者字串常量連線都要用到字串常量池。如果常量池中有該字串序列則返回,所以str建立了一個字串並放入常量池中,str2內的字元序列已在常量池中所以str2直接指向str指向的物件。基本資料型別就只有八個,數值型:byte,short,int,long,浮點型:float,double,字元型:char,布林型:boolean。

  • 中秋節和大豐收的關聯?
  • 正在工作的程式設計師,一週的生活狀態什麼樣?