成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

toString方法的陷阱

張漢慶 / 423人閱讀

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

toString方法簡介 作用

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

Object 類的 toString

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

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

因?yàn)樗荗bject里面已經(jīng)有了的方法,而所有類都是繼承Object,所以“所有對象都有這個方法”。
它通常只是為了方便輸出,比如System.out.println(xx),括號里面的“xx”如果不是String類型的話,就自動調(diào)用xx的toString()方法,同樣的,對于"+"號連接的字符串和對象,默認(rèn)會將對象轉(zhuǎn)化為字符串,也會調(diào)用該對象的toString方法。
總而言之,它只是sun公司開發(fā)java的時(shí)候?yàn)榱朔奖闼蓄惖淖址僮鞫匾饧尤氲囊粋€方法

陷阱 代碼
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

在調(diào)用toString()方法時(shí),進(jìn)行"TestToString"+this時(shí),會將this這個對象轉(zhuǎn)化為String,同樣要調(diào)用到this的toString()方法,于是產(chǎn)生了無窮遞歸的陷阱。

總結(jié)

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

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

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

接下來的時(shí)間把《Thinking in Java》再重新仔細(xì)的過一遍

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/65488.html

相關(guān)文章

  • 【ES6】改變 JS 內(nèi)置行為代理與反射

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

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

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

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

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

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

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

    curried 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<