ek man
хай
а почему у массива есть свойство length, а у String метод, почему не свойство?
Строка использует массив символов внутри и можно было бы длину массива выставить свойством для чтения наружу. Я думаю, что этого не сделали по следующим причинам:
Во-первых это бы нарушило инкапсуляцию - невозможно было бы создать реализацию иммутабельной строки, доступной только для чтения. Т.к свойство length было бы доступно для записи в клиентском коде, использующем строку. При этом любая запись в свойство length, была бы неконтролируемой для внутренней логики String и приводила бы к расхождению с длинной внутреннего массива char[].
В самом массиве, который в Java считается объектом (и создается new), запись в поле length закрыта на уровне компиляции. Если данное решение распространять на более сложные объекты типа строки - компилятор сильно и бессмысленно усложнится.
Причина того, почему в самом массиве length сделана полем, а не методом, предполагаю, в производительности вызовов методов на тот момент или так было удобнее для программистов JVM.
Во-вторых JavaBeans Spec, с которой работает много библиотек, требует обернуть свойство в метод. На ту же JSP страничку или в мэпинге json свойство бина вытягивается по JavaBeans Spec. И String.length() - одно из таких свойств.