<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### [測試對象等價](https://lingcoder.gitee.io/onjava8/#/book/04-Operators?id=%e6%b5%8b%e8%af%95%e5%af%b9%e8%b1%a1%e7%ad%89%e4%bb%b7) 關系運算符`==`和`!=`同樣適用于所有對象之間的比較運算,但它們比較的內容卻經常困擾 Java 的初學者。下面是代碼示例: ~~~ // operators/Equivalence.java public class Equivalence { public static void main(String[] args) { Integer n1 = 47; Integer n2 = 47; System.out.println(n1 == n2); System.out.println(n1 != n2); } } ~~~ 輸出結果: ~~~ true false ~~~ 表達式`System.out.println(n1 == n2)`將會輸出比較的結果。因為兩個**Integer**對象相同,所以先輸出**true**,再輸出**false**。但是,盡管對象的內容一樣,對象的引用卻不一樣。`==`和`!=`比較的是對象引用,所以輸出實際上應該是先輸出**false**,再輸出**true**(譯者注:如果你把 47 改成 128,那么打印的結果就是這樣,因為 Integer 內部維護著一個 IntegerCache 的緩存,默認緩存范圍是 \[-128, 127\],所以 \[-128, 127\] 之間的值用`==`和`!=`比較也能能到正確的結果,但是不推薦用關系運算符比較,具體見 JDK 中的 Integer 類源碼)。 那么怎么比較兩個對象的內容是否相同呢?你必須使用所有對象(不包括基本類型)中都存在的`equals()`方法,下面是如何使用`equals()`方法的示例: ~~~ // operators/EqualsMethod.java public class EqualsMethod { public static void main(String[] args) { Integer n1 = 47; Integer n2 = 47; System.out.println(n1.equals(n2)); } } ~~~ 輸出結果: ~~~ true ~~~ 上例的結果看起來是我們所期望的。但其實事情并非那么簡單。下面我們來創建自己的類: ~~~ // operators/EqualsMethod2.java // 默認的 equals() 方法沒有比較內容 class Value { int i; } public class EqualsMethod2 { public static void main(String[] args) { Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 100; System.out.println(v1.equals(v2)); } } ~~~ 輸出結果: ~~~ false ~~~ 上例的結果再次令人困惑:結果是**false**。原因:`equals()`的默認行為是比較對象的引用而非具體內容。因此,除非你在新類中覆寫`equals()`方法,否則我們將獲取不到想要的結果。不幸的是,在學習[復用](https://lingcoder.gitee.io/onjava8/#/./08-Reuse)(**Reuse**) 章節后我們才能接觸到“覆寫”(**Override**),并且直到[附錄:集合主題](https://lingcoder.gitee.io/onjava8/#/./Appendix-Collection-Topics),才能知道定義`equals()`方法的正確方式,但是現在明白`equals()`行為方式也可能為你節省一些時間。 大多數 Java 庫類通過覆寫`equals()`方法比較對象的內容而不是其引用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看