2010-09-13 61 views
1

我對API的興趣越來越大,開始寫自己的,但後來我想到了一些關於Java的標準庫。特定語言的字符串類

Java的標準庫有一個包含大量方法的String類,這不是不好的設計嗎?我的意思是,如果我要創建一個String類的新實例,它將創建一個包含數十種方法的對象(toUpper,toLower等);這不會佔用這麼簡單的字符串多少內存?

感謝,

威廉麪包車Doorn的

+2

不需要包含結尾(「謝謝」+簽名) – 2010-09-13 18:53:33

回答

12

沒有 - 你只是 「買單」 的方法一次,而不是每個實例一次。畢竟,代碼不會爲String的每個不同實例更改,那麼爲什麼要爲每個實例另外創建一個副本?

(在某些基於原型的語言我懷疑有可能對於很多方法,這取決於他們是如何分配的對象的處罰......但是,你不得不問的很具體的情況。)

儘管Java中的String類確實有很多方法,但在許多平臺中都會出現相同的情況 - 因爲有很多方法可以使用字符串。

+0

即使基於原型的語言通常也沒有浮動的相同方法的多個副本。對象通常分享父母的方法。 – Chuck 2010-09-13 18:35:07

+0

@Chuck:推測這取決於方法是繼承了還是單獨分配了。這種考慮正是爲什麼我說你必須談論具體情況:) – 2010-09-13 18:38:03

+0

謝謝,非常優雅和完整的答案。標記爲已接受。 – wvd 2010-09-13 18:54:27

6

方法不佔用每個對象的內存。您可以將a.myMethod()視爲myMethod(a)的語法糖。 (當然,幕後還有更多,但是這可能會幫助你理解爲什麼很多方法並不意味着對象創建需要大量內存。)

1

方法不會添加到對象內存空間。

直到它們被調用。然後一些內存將被用於新的堆棧幀,並在方法結束後釋放。