特定语言的字符串类

wvd*_*wvd 1 java memory string api object

我对API越来越感兴趣,并且开始编写自己的API,但后来我想到了Java的标准库.

Java的标准库有一个带有大量方法的String类,这不是很糟糕的设计吗?我的意思是,如果我要创建一个String类的新实例,它将创建一个具有许多方法的对象(toUpper,toLower等); 对于这么简单的字符串,这不会占用太多内存吗?

谢谢,

威廉范多恩

Jon*_*eet 12

不 - 你只为方法"付费"一次,而不是每个实例一次.毕竟,代码不会针对每个不同的实例进行更改String,那么为什么要为每个实例创建一个新的副本呢?

(在一些基于原型的语言中,我怀疑对于具有大量方法的对象可能会受到惩罚,具体取决于它们的分配方式......但是您必须询问非常具体的情况.)

虽然Java中的String类确实有很多方法,但在许多平台中都会出现同样的情况 - 因为有很多种方法可以使用字符串.


Hei*_*nzi 6

方法不占用每个对象的内存.您可以将其a.myMethod()视为语法糖myMethod(a).(当然,幕后还有更多内容,但这可能有助于您理解为什么很多方法并不意味着对象创建需要大量内存.)