Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Объясните разницу в синтаксисе


Автор: kamnerobot 30.5.2010, 04:34
 Почему если надо узнать длинну массива пишем, скажем 
 args.length

  а если длинну строки то 
    myString.length()

  

Автор: dorogoyIV 30.5.2010, 08:25
ну так разные ведь вещи!
длинна массива, и метод "количество символов в строке"

Автор: dobrolub 30.5.2010, 08:50
Хороший вопрос. Учитывая, что String не может поменять своё значение, могли бы сделать и просто полем. Метод length() просто возвращает count – приватное поле объекта. То есть вполне могли сделать также как и в array -  "hello world".length и всё тут. Причины действительно на первый взгляд не понятны.

Автор: 53x7u5 1.6.2010, 22:25
Цитата(dobrolub @  30.5.2010,  08:50 Найти цитируемый пост)
Хороший вопрос. Учитывая, что String не может поменять своё значение, могли бы сделать и просто полем. Метод length() просто возвращает count – приватное поле объекта. То есть вполне могли сделать также как и в array -  "hello world".length и всё тут. Причины действительно на первый взгляд не понятны. 


А по-моему это вполне логично. Если строка в памяти хранится вместе с параметром отражающим её длинну - то это будет мартышкин труд. Реально далеко даже не в половине случаев для работы со строками нужно точно знать ее длинну. В итоге программа за счет неиспользуемых данных будет занимать неоправданно больше места в памяти, что так или иначе отразится на быстродействии. В то же время для работы с массивами знать его длинну нужно всегда и обращаться к ней нужно постоянно. Следовательно удобнее для каждого объекта данных хранить параметр эквивалентный длинне массива. 
Таким образом для строк выгоднее использовать метод, а для массива - читать параметр напрямую. Это конечно только догадка, но звучит вроде разумно. 
Поправьте если я не прав.

Автор: dobrolub 1.6.2010, 22:55
это надо посмотреть в исходники java, на конструкторы класса String. Обрати внимание на поле count, а также на метод length();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)