Какая разница между длиной и длиной()?

Я заметил, что при выполнении длины массива вы пишете что-то вроде:

arrayone.length;

Однако для таких вещей, как списки массивов или строки, вы пишете скобку на конце, например следующую строку длины String:

stringone.length();

Какова основная причина этого и как вы знаете, когда класть скобки или сейчас?

Ответ 1

.length;

имеет прямой доступ к элементу поля.

.length();

вызывает метод (например, аксессор) для доступа к элементу поля.

в случае String, этого следует ожидать, поскольку он неизменен.

Ответ 2

Arrays обрабатываются иначе, чем Strings или ArrayLists или что-либо еще, что можно пересчитать на Java. Array в значительной степени является родным типом, и его длина никогда не может быть изменена после ее инициализации, поэтому нет необходимости в инкапсуляции. Переменная длины может быть непосредственно экспонирована без побочных эффектов.

Причина, по которой String использует метод вместо переменной, состоит в том, что она внутренне использует char[], которую она не хочет публично публиковать (для неизменяемости/инкапсуляции), поэтому она переносит переменную длины в length(). По той же причине ArrayList имеет метод size() вместо переменной length.

Единственный раз, когда вы будете использовать переменную вместо метода, - это массивы. Все остальное будет методом. То есть вы будете использовать скобки для всего, кроме массивов.

Ответ 3

Единственный верный способ узнать, когда использовать тот, который есть. Хотя IDE с автозаполнением обычно поможет вам, если вы не помните.

По большей части (не всегда) array.length, System.out и System.err являются наиболее распространенными 3, с которыми вы столкнетесь, это фактически членский доступ вместо вызовов методов.

Ответ 4

.length() - это метод класса String и который возвращает количество символов в строке.

.length будет указывать количество элементов, хранящихся в массиве.

public class length
{
public static void main(String args[])
{
String x="test";
int a[]={1,2,3,4};
System.out.println(x.length());
System.out.println(a.length);
}
}

// output
4
4

Ответ 5

Array.length является свойством этого Array, похожего на ссылку на переменную.

ArrayList.size() - это вызов фактического метода для объекта списка массивов.

Ответ 6

int[] myArray = new int[10];
String myString = "hello world!";
List<int> myList = new ArrayList<int>();

myArray.length    //gives the length of the array
myString.length() //gives the length of the string
myList.size()     //gives the length of the list

Скорее всего, строки и массивы были спроектированы в разное время и, следовательно, были использованы в разных соглашениях. Одно из обоснований заключается в том, что, поскольку строки используют массивы внутри метода, метод length() использовался, чтобы избежать дублирования одной и той же информации. В конечном счете это просто непоследовательно, что эволюционировало, что определенно было бы исправлено, если бы язык был переработан с нуля.: D

Ответ 7

Основное отличие состоит в том, что в первом случае A его тип массива, например int[], Object[], double[], ect.., который имеет общедоступное поле, называемое lenght, а B) второй случай - это Object Строка с функцией length(), функция может быть вызвана getLength() или что-то еще. Длина публичного поля типа массива - это, пожалуй, похмелье от С++.

Типы массивов имеют следующее:

  • Публичная конечная длина поля, которая содержит количество компоненты массива (длина может быть положительной или нулевой)
  • Открытый общедоступный метод clone, который переопределяет метод с тем же именем в объекте класса и не выбрасывает исключенные исключения.
  • Все члены, унаследованные от класса Object; единственный метод Объектом, который не унаследован, является его метод clone.

Посмотрите это, типы массивов.

Ответ 8

length является ссылкой на элемент данных псевдоданных и работает только для (small-a) массивов (игнорируя классы, которые вы можете определить для реализации этого элемента).

Все остальное является объектом класса, и все классы JDK, которые имеют это понятие, определяют методы экземпляра length() или size(). (Я бы хотел, чтобы они были последовательными и выбрали тот или другой, но это вода над мостом.)