Ответ 1
.length;
имеет прямой доступ к элементу поля.
.length();
вызывает метод (например, аксессор) для доступа к элементу поля.
в случае String
, этого следует ожидать, поскольку он неизменен.
Я заметил, что при выполнении длины массива вы пишете что-то вроде:
arrayone.length;
Однако для таких вещей, как списки массивов или строки, вы пишете скобку на конце, например следующую строку длины String:
stringone.length();
Какова основная причина этого и как вы знаете, когда класть скобки или сейчас?
.length;
имеет прямой доступ к элементу поля.
.length();
вызывает метод (например, аксессор) для доступа к элементу поля.
в случае String
, этого следует ожидать, поскольку он неизменен.
Arrays
обрабатываются иначе, чем Strings
или ArrayLists
или что-либо еще, что можно пересчитать на Java. Array
в значительной степени является родным типом, и его длина никогда не может быть изменена после ее инициализации, поэтому нет необходимости в инкапсуляции. Переменная длины может быть непосредственно экспонирована без побочных эффектов.
Причина, по которой String
использует метод вместо переменной, состоит в том, что она внутренне использует char[]
, которую она не хочет публично публиковать (для неизменяемости/инкапсуляции), поэтому она переносит переменную длины в length()
. По той же причине ArrayList
имеет метод size()
вместо переменной length
.
Единственный раз, когда вы будете использовать переменную вместо метода, - это массивы. Все остальное будет методом. То есть вы будете использовать скобки для всего, кроме массивов.
Единственный верный способ узнать, когда использовать тот, который есть. Хотя IDE с автозаполнением обычно поможет вам, если вы не помните.
По большей части (не всегда) array.length, System.out и System.err являются наиболее распространенными 3, с которыми вы столкнетесь, это фактически членский доступ вместо вызовов методов.
.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
Array.length
является свойством этого Array
, похожего на ссылку на переменную.
ArrayList.size()
- это вызов фактического метода для объекта списка массивов.
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
Основное отличие состоит в том, что в первом случае A его тип массива, например int[]
, Object[]
, double[]
, ect.., который имеет общедоступное поле, называемое lenght, а B) второй случай - это Object Строка с функцией length()
, функция может быть вызвана getLength()
или что-то еще. Длина публичного поля типа массива - это, пожалуй, похмелье от С++.
Типы массивов имеют следующее:
Посмотрите это, типы массивов.
length
является ссылкой на элемент данных псевдоданных и работает только для (small-a) массивов (игнорируя классы, которые вы можете определить для реализации этого элемента).
Все остальное является объектом класса, и все классы JDK, которые имеют это понятие, определяют методы экземпляра length()
или size()
. (Я бы хотел, чтобы они были последовательными и выбрали тот или другой, но это вода над мостом.)