Душевная пытка: как Java получает длину массивов и строк? длина или длина ()?

Java
Душевная пытка: как Java получает длину массивов и строк? длина или длина ()?

Дай ответ за 1 секунду, давай, послушай мой пароль: "Как Java получает длину массивов и строк? length или length()?"

Просматривая programcreek, я нашел вышеупомянутую тему. Честно говоря, у меня тогда в голове была ужасающая картина:

Интервьюер Лао Ма сидел напротив меня, и я восхищался средиземноморской прической. Хотя он был немного утомлен, он уверенно задал мне вышеуказанный вопрос. После небольшого колебания я ответил: «Длина для массивов, длина, за которой следуют круглые скобки для строк». Лао Ма достоин быть мастером в интервью, и он мгновенно уловил неуверенность в себе из моего ответа. Я чувствовал это, потому что видел, как уголки рта старого коня слегка шевелились, как будто он хотел причмокнуть. Но из вежливости ко мне он воздержался.

Должен ли я использовать length или length()? Честно говоря, в то время я был немного неуверен. Мне не хватает функции автоматического напоминания кода в IDE!

int[] arr = new int[4];
System.out.println(arr.length);// 获取数组的长度

String str = "沉默王二";
System.out.println(str.length());// 获取字符串的长度

Это понятно,множествоа такженитьВсе являются объектами, и длина доступа используетсяlength()метод в порядке. Почему массив используется для того, чтобы меч шел боком?lengthА поля?

Прежде всего, мы должны понимать, что массив — это контейнер, при его создании определяется не только тип элементов, но и количество элементов. Другими словами, длина массива фиксирована и не может быть больше или меньше. Следовательно, массив может использовать поле (длину) для представления длины.

Существует два способа создания массива, это должен знать каждый. один черезnewКлючевое слово создает заданную длину, а затем назначает ее, а другое - передать{}Инициализировать напрямую.

// new
int[] arr = new int[4];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;

// {}
int [] arr1 = {0, 1, 2, 3};

Но независимо от того, какой метод используется, длина массива известна явно. И не станет ни длиннее, ни короче (не выучить золотой обруч Сунь Укуна).

Поскольку массивы также являются объектами, следующий код допустим.

Object arr2 = new int[4];

Это означает, что массив наследуется от суперклассаjava.lang.ObjectВсе методы-члены и поля . На самом деле, мы можем получить информацию о типе класса массива с помощью следующего кода.

Object arr2 = new int[4];
System.out.println(arr2.getClass());

Object arr3 = new String[4];
System.out.println(arr3.getClass());

Какой будет результат на выходе?

class [I
class [Ljava.lang.String;

class [IПредставляет информацию о типе объекта «массива типа int» во время выполнения;class [Ljava.lang.String;Представляет информацию о типе объекта «массива строкового типа» во время выполнения.

Так почему же массив не определяет отдельный класс для его представления? Как насчет класса String?

Правдоподобное объяснение состоит в том, что Java скрывает это. Если есть Array.java, мы также можем представить, как он выглядит, он должен определить контейнер для хранения элементов массива, как и класс String.

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}

Но действительно ли необходимо это делать? Не будет ли лишним определить отдельный класс для массива? Поскольку нет необходимости определять массив как класс, нет необходимости определять еще одинlength()метод, чтобы получить длину массива, напрямую используйтеlengthЭто поле в порядке, не так ли?

Итак, почему класс String имеетlength()метод? Взгляните на исходный код, чтобы понять.

    /**
     * Returns the length of this string.
     * The length is equal to the number of Unicode
     * code units in the string.
     */
    public int length() {
        return value.length;
    }

length()Метод возвращает длину (длину) значения массива символов, само значение является приватным, поэтому необходимо предоставить метод публичного уровня для класса String для внешнего доступа к длине символа.

Подводя итог, когда Java получает длину массива, используйтеlength, который используется для получения длины строкиlength(), разница между ними, я думаю, все поняли.

Последнее напоминание: высокие здания возвышаются над землей. Насколько высоким может быть здание, какой длины может быть построен мост, важен их фундамент. Также для наших технических специалистов: чем прочнее будут базовые знания, тем дальше мы продвинемся.


Ну что же, читатели и друзья, вышеизложенное и есть все содержание этой статьи.Я вижу, что все лучшие программисты здесь, второй брат должен дать вам большой палец вверх👍. Если вам это не нравится и вы хотите увидеть больше, я порекомендую вам еще несколько статей.

Пытка души: почему строки Java неизменяемы?

Душевная пытка: создайте строку Java, используйте "" или конструктор

Пытка души: как проверить, содержит ли массив Java определенное значение?

Душевная пытка: как работает Java substring()?

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