成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

toString方法的陷阱

張漢慶 / 385人閱讀

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

toString方法簡(jiǎn)介 作用

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

Object 類的 toString

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

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

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

陷阱 代碼
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í),會(huì)將this這個(gè)對(duì)象轉(zhuǎn)化為String,同樣要調(diào)用到this的toString()方法,于是產(chǎn)生了無窮遞歸的陷阱。

總結(jié)

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65488.html

相關(guān)文章

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

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

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

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

    explorer_ddf 評(píng)論0 收藏0
  • 深入理解ES6之《代理和反射》

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

    Stardustsky 評(píng)論0 收藏0
  • 深入理解ES6之《代理和反射》

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

    curried 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<