<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 8,  comments - 6,  trackbacks - 0

    1.10  “==”不等于“.equals”

    這里舉出一個Java編程程序員經常碰到的問題。例如現在是凌晨3點,在你喝完第4杯咖啡后,你設法找到正確的邏輯來解決復雜的編程問題。到目前,你幾乎不能思考String和Object引用,因為你已經昏昏欲睡了。然后糟糕的事情發生了……不,并不是Java溢出,而是如下所示。

    String name = getName();
    if (name == "Sleepy") // oops!
    {
    doSomething();
    }

    你快速編譯并測試代碼后,代碼似乎正常運行。終于到下班回家休息的時候了!然而,一段時間后,應用程序測試發現了一個間歇性錯誤,并跟蹤到此錯誤的來源恰好是這段代碼。

    “怎么會這樣?”你可能會憤怒地說,“前幾天我還試驗過類似的String比較,并且能夠正確運行!”。但是,你需要首先重溫一下Java對象引用的概念。一個對象變量是一個指向存儲在堆內存(heap memory)中實際對象的引用(指針)。當為另一個變量分配一個變量時,事實上分配的是引用而不是實際的對象(如圖1-1所示):

    String a, b, c, d;
    a = "123";
    b = a;
    c = new String("123");
    d = "WCJ";

    圖 1-1  對象引用

    Java中,“==”運算符用來比較兩個引用以查看它們是否指向同一個內存對象。而對于String實例,運行時狀態會盡可能地確保任意兩個具有相同字符信息的String字面值指向同一個內部對象。此過程稱為駐留(interning),但是它并不有助于每個String的比較。一個原因是垃圾收集器線程刪除了駐留值,另一個原因是String所在的位置可能被一個由String構造函數創建的新實例占用。如果是這樣,“==”將總是返回false。
    可以設計equals方法來比較兩個對象的狀態(state)或每個對象的內容。對你自己的類,必須重寫此方法來使它正確操作。但是如果使用equals方法,String實例總是能夠正確地比較。假定所有的String值是駐留的,下面的代碼段說明了此問題:

    String name1, name2, name3;
    name1 = "123";

    name2 = name1;
    if (name1 == name2) {}         // true
    if (name1.equals(name2)) {}    // true

    name2 = "123";
    if (name1 == name2) {}         // usually true
    if (name1.equals(name2)) {}    // true

    name3 = new String("123");
    if (name1 == name3) {}         // false
    if (name1.equals(name3)) {}    // true


    注意:

    總是使用.equals來比較兩個String值,盡管使用“==”運算符看似能夠正確操作。對于大多數應用程序而言,即使它能正確運行,但“==”代碼事實上是錯誤的,而只有equals是正確的。因此告訴所有你的開發同行支持String的“equals(平等)”權吧(這很可能是本書中最差的雙關語)!


    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲av一综合av一区| 在线a亚洲v天堂网2019无码| 亚洲老熟女@TubeumTV| 秋霞人成在线观看免费视频| 亚洲AV中文无码字幕色三| 国产成人免费ā片在线观看老同学 | 中文字幕亚洲无线码a| 一级毛片免费毛片毛片| 免费人成视网站在线观看不卡| 亚洲s码欧洲m码吹潮| 国产在线19禁免费观看国产| 国产精品亚洲专区无码WEB| 国产成人精品男人免费| 免费国产高清毛不卡片基地| 中文亚洲成a人片在线观看| 在线观看人成视频免费无遮挡| 亚洲爆乳无码一区二区三区| 1a级毛片免费观看| 亚洲精品无码av片| 一本色道久久88综合亚洲精品高清| 九九热久久免费视频| 久久精品九九亚洲精品| 猫咪社区免费资源在线观看| 亚洲国产成人AV在线播放| 国产亚洲精品成人a v小说| 亚欧免费无码aⅴ在线观看| 亚洲AV成人噜噜无码网站| 全免费a级毛片免费**视频| 免费一级全黄少妇性色生活片| 无码 免费 国产在线观看91| 亚洲熟女少妇一区二区| 免费能直接在线观看黄的视频| 亚洲精品久久无码| 77777亚洲午夜久久多人| **实干一级毛片aa免费| 色九月亚洲综合网| 久久国产亚洲观看| 最新免费jlzzjlzz在线播放| 久久国产美女免费观看精品| 精品亚洲国产成人| 亚洲永久无码3D动漫一区|