我对API越来越感兴趣,并且开始编写自己的API,但后来我想到了Java的标准库。
Java的标准库有一个带有大量方法的String类,这不是一个糟糕的设计吗?我的意思是,如果我要创建一个String类的新实例,它将创建一个具有许多方法的对象(toUpper,toLower等);对于这么简单的字符串,这不会占用太多内存吗?
谢谢,
William van Doorn
答案 0 :(得分:12)
不 - 你只为方法“付费”一次,而不是每个实例一次。毕竟,String
的每个不同实例的代码都不会更改,那么为什么要为每个实例创建一个新副本呢?
(在一些基于原型的语言中,我怀疑可能会对具有多种方法的对象进行处罚,具体取决于它们的分配方式......但是您必须询问非常具体的情况。)
虽然Java中的String类确实有很多方法,但许多平台都会出现同样的情况 - 因为有很多种方法可以使用字符串。
答案 1 :(得分:6)
方法不占用每个对象的内存。您可以将a.myMethod()
视为myMethod(a)
的语法糖。 (当然,幕后还有更多内容,但这可能有助于您理解为什么很多方法并不意味着对象创建需要大量内存。)
答案 2 :(得分:1)
方法不会添加到对象的内存空间。
直到他们被召唤为止。然后将为新的堆栈帧获取一些内存,并在方法完成后释放回来。