2010-09-13 64 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

方法不会添加到对象内存空间。

直到它们被调用。然后一些内存将被用于新的堆栈帧,并在方法结束后释放。