亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

typecast "(String)anObject" 和 anotherString.value.

typecast "(String)anObject" 和 anotherString.value.

神不在的星期二 2023-06-08 19:15:48
我正在探索我在 equals 方法中遇到的 Java 中的 String API首先,if (anObject instanceof String) {    String anotherString = (String)anObject;即使在檢查了一個對象的 instanceOf String 之后,它已經在該條件下進行了類型轉換,您能否幫助我理解這一點。第二,String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length)這里我們為什么anotherString.value.length不使用anotherString.length我嘗試了多種來源JLS,例如Herbert SchildtBook,但無法真正破譯它。請幫助我更好地理解這一點。public boolean equals(Object anObject) {    if (this == anObject) {        return true;    }    if (anObject instanceof String) {        String anotherString = (String)anObject;        int n = value.length;        if (n == anotherString.value.length) {            char v1[] = value;            char v2[] = anotherString.value;            int i = 0;            while (n-- != 0) {                if (v1[i] != v2[i])                    return false;                i++;            }            return true;        }    }    return false;}
查看完整描述

1 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

即使在檢查了一個對象的 instanceOf String 之后,它已經在該條件下進行了類型轉換,您能否幫助我理解這一點。

無論檢查如何instanceof,您都不能將 type 的值分配Object給 type 的變量String。所以anObject必須進行類型轉換以確保編譯器沒問題。(至少有一種語言——TypeScript——其編譯器能夠根據檢查推斷出賦值是正確的instanceof,但 Java 的編譯器還沒有這樣做……還沒有。)

這里為什么我們使用 anotherString.value.length 而不是 anotherString.length

value是包含實際字符串數據的對象中的實例成員String(作為char[]byte[]數組;它char[]在 JDK 1-8 中,它byte[]在 JDK 9+ 中)。使用它是有意義的,value.length因為這是數組的長度;如果value兩個字符串的 s 長度不同,則它們不能相等。使用anotherString.length()將需要一個無意義的方法調用(記住,publiclength是一個方法,而不是一個字段),無論如何它最終都會查看value.length(加上一些開銷,至少在 JDK11 中)。


查看完整回答
反對 回復 2023-06-08
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號