Java String array: есть ли размер метода?


152

Я пришел из фона php и в php есть array_size()функция, которая сообщает вам, сколько элементов в массиве используется.

Есть ли подобный метод для String[]массива? Спасибо.


3
Хех, все ответы были в течение одной минуты.
Jjnguy

1
Ах, PHP с его загроможденным глобальным пространством имен. Старые добрые времена ...
Кевинджи

2
я думаю, что он имеет в виду php count (), а не array_size ()
Джошуа Бернс

Ответы:


277

Да .length(свойство, а не метод):

String[] array = new String[10];
int size = array.length;

2
Привет, как мы могли бы найти документы, которые перечисляют все возможные свойства и функции объекта массива? Я не имею в виду объект Arrays, который является единственными документами, которые я могу найти.
GMsoF

1
@GMsoF Документация для «[]» (массив, а не объект Arrays) фактически является спецификацией Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Редактировать: Ах ... комментарий из 2013 ...
Акапулько

44
array.length

На самом деле это последний элемент массива, а не метод.


2
IIRC, на самом деле это не поле, оно просто выглядит как одно.
Том Хотин - tackline

О, тогда что это? Какая-то особенная вещь Array?
Jjnguy

3
"псевдополе", которое компилируется в специальный код операции длины массива, а не в код операции доступа к полю.
Пит Киркхам

2
Это поле, согласно §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): «Общая длина конечного поля, которая содержит количество компонентов массива ( длина может быть положительной или нулевой).
Майкл Майерс

19

Также, вероятно, полезно отметить, что если у вас есть многомерный массив, вы можете получить соответствующее измерение, просто добавив «[0]» к массиву, который запрашиваете, пока не достигнете соответствующей оси / кортежа / измерения.

Это, вероятно, лучше объяснить с помощью следующего кода:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

Который производит вывод:

5
12

15

Свойство array.length

это публичная и конечная собственность. Это окончательно, потому что массивы в Java неизменны по размеру (но изменяются по значению элемента)


14

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

String [] haha ​​= {"olle", "bulle"};

ха-ха. длина будет 2


Просто чтобы придираться. Но я считаю, что массивы НЕ являются объектами в Java - они являются одним из двух ссылочных типов переменных. Другие существа объекты.
Джабби

2
@jabbie: Правда? У вас есть ссылка на это? Я задаю этот вопрос только потому, что вы можете сказать Object o = new String [] {"hello"};
Саймон Никерсон

Симон, я думаю, причина того, что оператор работает, состоит в том, что они ввели рефлексивные классы для всех примитивных типов.
Брайан Суини

9
Прочитайте первое предложение docs.oracle.com/javase/specs/jls/se8/html/jls-10.html, а затем попробуйте сказать нам, что массивы не являются объектами. ;)
Майкл Майерс

1
Вы могли бы использовать какое-то другое имя переменной, это меня так отвлекает
Space Rocker

11

В Java есть lengthполе, которое вы можете использовать в любом массиве, чтобы узнать его размер:

    String[] s = new String[10];
    System.out.println(s.length);

1
спасибо за то, что вы не разбираетесь в технических деталях о том, что это может или не может быть, и просто предоставили краткий и краткий ответ. +1 для вас. :)
Джошуа Бернс

9

Если вы хотите, чтобы функция сделала это

Object array = new String[10];
int size = Array.getlength(array);

Это может быть полезно, если вы не знаете, какой у вас массив, например, int [], byte [] или Object [].


6

Есть разница между длиной Stringи arrayпояснениями:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string

Это должно быть обновлено в вопросе, если это уточнение.
Whitecat

5

Ответ: «Все они». Массив Java выделяется с фиксированным количеством слотов элементов. Атрибут "длина" скажет вам, сколько. Это число является неизменным для жизни массива. Для эквивалента с изменяемым размером вам нужен один из классов java.util.List, где вы можете использовать метод size (), чтобы узнать, сколько элементов используется.

Однако есть «Используется», а затем « Используется» . В массиве объектов класса вы можете иметь слоты элементов, элементы которых являются нулевыми объектами, поэтому, даже если они учитываются в атрибуте длины, но определения большинства людей не используются (YMMV, в зависимости от приложения). Нет встроенной функции для возврата нулевых / ненулевых значений.

Объекты списка имеют еще одно определение «В использовании». Чтобы избежать чрезмерного создания / уничтожения базовых структур хранения, в этих классах обычно есть некоторые отступы. Он используется внутри, но не учитывается в возвращаемом методе size (). И если вы попытаетесь получить доступ к этим элементам без расширения списка (с помощью методов добавления), вы получите недопустимое исключение индекса.

Таким образом, для списков вы можете использовать «Используется» для ненулевых, зафиксированных элементов, всех зафиксированных элементов (включая нулевые элементы) или всех элементов, включая пространство расширения, выделенное в настоящее время.


2

Все приведенные выше ответы являются правильными. Важно отметить, что массивы имеют атрибут длины, но не метод длины. Всякий раз, когда вы используете строки и массивы в Java, вы можете столкнуться с тремя основными моделями:

  1. Строка s = новая строка ("видясагар");
    System.out.println (s.length ()); // В этом случае мы используем только String. Нет атрибута длины для строк. мы должны использовать метод length ().
  2. int [] s = new int [10]; System.out.println (s.length); // здесь мы используем атрибут длины массивов.
  3. String [] s = новая строка [10];
    System.out.println (s.length); // Здесь, хотя тип данных String, это не одна строка. s является ссылкой на массив строк. Поэтому мы используем атрибут длины массивов, чтобы выразить, сколько строк может поместиться в этом массиве.

1

Не совсем ответ на ваш вопрос, но если вы хотите иметь что-то вроде массива, который может увеличиваться и уменьшаться, вы не должны использовать массив в Java. Вы, вероятно, лучше всего используете ArrayList или другую реализацию List.

Затем вы можете вызвать size (), чтобы получить его размер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.