Строковый класс на определенных языках - PullRequest
1 голос
/ 13 сентября 2010

Я стал больше интересоваться API и собирался начать писать свой собственный, но потом я немного подумал о стандартной библиотеке Java.

В стандартной библиотеке Java есть класс String с множеством методов, разве это не плохой дизайн? Я имею в виду, если бы я создал новый экземпляр класса String, он бы создал объект с десятками методов (toUpper, toLower и т. Д.); Разве это не займет много памяти для такой простой строки?

Спасибо

Уильям ван Дорн

Ответы [ 3 ]

12 голосов
/ 13 сентября 2010

Нет - вы платите только за методы один раз, а не один раз за экземпляр.В конце концов, код не меняется для каждого отдельного экземпляра String, поэтому зачем вам нужна новая копия для каждого экземпляра?

(В некоторых языках на основе прототипов я подозреваю, что может быть штрафом за объекты с множеством методов, в зависимости от того, как они назначены ... но вам нужно будет спросить об очень специфических ситуациях.)

Хотя класс String в Java имеетво многих методах одна и та же ситуация возникает на многих платформах - потому что есть очень много способов использовать строку.

6 голосов
/ 13 сентября 2010

Методы не занимают память на объект.Вы можете думать о a.myMethod() как о синтаксическом сахаре для myMethod(a).(Конечно, многое происходит за кулисами, но это может помочь вам понять, почему целый ряд методов не означает, что для создания объекта требуется много памяти.)

1 голос
/ 13 сентября 2010

Методы не добавляют в пространство памяти объектов.

То есть, пока они не вызываютсяЗатем некоторая память будет взята для нового кадра стека и возвращена обратно после завершения метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...