国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

toString方法的陷阱

張漢慶 / 382人閱讀

摘要:方法簡介作用返回該對象的字符串表示。建議所有子類都重寫此方法。類的該方法返回一個字符串,該字符串由類名對象是該類的一個實例標記符和此對象哈希碼的無符號十六進制表示組成。

toString方法簡介 作用

返回該對象的字符串表示。通常,toString()方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易于讀懂的信息表達式。建議所有子類都重寫此方法。

Object 類的 toString

該方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。換句話說,該方法返回一個字符串,默認代碼如下

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());  // 也就是返回類名以及該對象的十六進制hashcode 
}

因為它是Object里面已經有了的方法,而所有類都是繼承Object,所以“所有對象都有這個方法”。
它通常只是為了方便輸出,比如System.out.println(xx),括號里面的“xx”如果不是String類型的話,就自動調用xx的toString()方法,同樣的,對于"+"號連接的字符串和對象,默認會將對象轉化為字符串,也會調用該對象的toString方法。
總而言之,它只是sun公司開發java的時候為了方便所有類的字符串操作而特意加入的一個方法

陷阱 代碼
package test160118;

public class TestToString {
    public static void main(String[] args) {
        TestToString t1 = new TestToString();
        System.out.println(t1.toString());
    }
    
    @Override
    public String toString() {
        return "TestToString"+this;
    }
}
分析

代碼重寫了toString方法

重寫的方法使用了"+"連接字符串和this

在調用toString()方法時,進行"TestToString"+this時,會將this這個對象轉化為String,同樣要調用到this的toString()方法,于是產生了無窮遞歸的陷阱。

總結

這個問題是我在面試時遇到的,當時面試官問我toString()可能會遇到哪些陷阱,當時確實沒有想出來

回來以后翻《Thinking in Java》,終于在String那一章找到了答案

雖然這個問題確實有點偏,但是也確實暴露了我自己基礎知識不牢,讀書不求甚解的壞毛病,以后要改

接下來的時間把《Thinking in Java》再重新仔細的過一遍

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65488.html

相關文章

  • 【ES6】改變 JS 內置行為代理與反射

    摘要:通過對這些底層內置對象的代理陷阱和反射函數,讓開發者能進一步接近引擎的能力。顯然,與要求代理目標對象必須是一個函數,這兩個代理陷阱在函數的執行方式上開啟了很多的可能性,結合使用就可以完全控制任意的代理目標函數的行為。 代理(Proxy)可以攔截并改變 JS 引擎的底層操作,如數據讀取、屬性定義、函數構造等一系列操作。ES6 通過對這些底層內置對象的代理陷阱和反射函數,讓開發者能進一步接...

    lushan 評論0 收藏0
  • 深入理解ES6筆記(十一)代理(Proxy)和反射(Reflection)API(12)

    摘要:是陷阱函數對應的反射方法,同時也是操作的默認行為。對象外形指的是對象已有的屬性與方法的集合,由于該屬性驗證只須在讀取屬性時被觸發,因此只要使用陷阱函數。無論該屬性是對象自身的屬性還是其原型的屬性。 主要知識點:代理和反射的定義、常用的陷阱函數、可被撤銷的代理、將代理對象作為原型使用、將代理作為類的原型showImg(https://segmentfault.com/img/bVbfWr...

    explorer_ddf 評論0 收藏0
  • 深入理解ES6之《代理和反射》

    摘要:使用陷阱驗證屬性用于接收屬性代理的目標的對象要寫入的屬性鍵被寫入的屬性的值操作發生的對象通常是代理屬性必須是數字拋錯用陷阱驗證對象結構屬性不存在拋出錯誤使用陷阱隱藏已有屬性可以用操作符來檢測給定對象中是否包含有某個屬性,如果自有屬性或原型屬 使用set陷阱驗證屬性 let target = { name: target } let proxy = new Proxy(targe...

    Stardustsky 評論0 收藏0
  • 深入理解ES6之《代理和反射》

    摘要:使用陷阱驗證屬性用于接收屬性代理的目標的對象要寫入的屬性鍵被寫入的屬性的值操作發生的對象通常是代理屬性必須是數字拋錯用陷阱驗證對象結構屬性不存在拋出錯誤使用陷阱隱藏已有屬性可以用操作符來檢測給定對象中是否包含有某個屬性,如果自有屬性或原型屬 使用set陷阱驗證屬性 let target = { name: target } let proxy = new Proxy(targe...

    curried 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<