length и length() в Java

219
16 июля 2018, 01:10

Почему при получении количества элементов определяющих размер массива мы используем array.length, а при получении количества элементов строки используется метод str.length()?

Почему именно так?

Answer 1

В строке мы не можем четко сказать какой реальный размер строки. Для этого используется метод, в котором и подсчитывается длина строки. В массиве же при его создании мы указываем количество элементов. Это количество переменных сохраняется в публичное финальное поле length

Если посмотреть глубоко в метод length():

 /**
     * Returns the length of this string.
     * The length is equal to the number of <a href="Character.html#unicode">Unicode
     * code units</a> in the string.
     *
     * @return  the length of the sequence of characters represented by this
     *          object.
     */
    public int length() {
        return value.length >> coder();
    }

Зайдем теперь в метод coder()

byte coder() {                                        
    return COMPACT_STRINGS ? coder : UTF16;           
}  

JAVA 9 принесла нам концепцию компактных строк. COMPACT_STRINGS - это компактная строка , если да то возвращаем coder(по умолчанию 0), иначе строка не сжатая и мы возвращаем UTF16(1). 0 и 1 используется для сдвига.

Если допустим value.length вернет нам 7 - а строка у нас не сжата, то будет выполнен сдвиг битов на 1. В итоге длина строки получится не 7, а 3.

БОЛЕЕ ПОДРОБНО СМ. ЗДЕСЬ baeldung.com/java-9-compact-string

READ ALSO
Фон внутри текста

Фон внутри текста

Как сделать фон, который находится в тексте? Текст TEKST отрисован картинкой, к примеру в png

235
Вывод рандомных чисел в chart js

Вывод рандомных чисел в chart js

Есть в графике labels ,в каждом из них 2 столбика , один столбик выводит рандомные числа ,а на второй не знаю как прописать скриптПомогите пожалуйста

212
Не меняется значение в input

Не меняется значение в input

В input с индексами a,b,c вписываются значенияЕсли в a какой-либо символ или строка совпадает с b, то совпавшие символы или строки меняются на c:

485
TokenMismatchException в JavaScript

TokenMismatchException в JavaScript

У меня стоят запросы к сайту через Routes (webphp) Когда я просто перехожу, всё работает, но когда запускаю запрос через JavaScript Пишет эту ошибку в консоль:

187