¿Cuál es la diferencia entre longitud y longitud ()?

Me he dado cuenta de que al hacer la longitud de una matriz, escribes algo como:

arrayone.length; 

Sin embargo, para cosas tales como listas de matriz o una cadena, escriba un corchete en el extremo, como el siguiente para la longitud de la cadena:

 stringone.length(); 

¿Cuál es la razón clave de esto y cómo sabe cuándo colocar los corchetes o ahora?

 .length; 

Accede directamente a un miembro de campo.

 .length(); 

invoca un método (es decir, un elemento de acceso) para acceder a un miembro de campo.

en el caso de String , esto es de esperar ya que es inmutable .

Arrays se manejan de manera diferente a las Strings o ArrayLists Arrays o cualquier otra cosa que se pueda contar en Java. Una Array es prácticamente un tipo nativo y su longitud nunca se puede cambiar después de su inicialización, por lo que no es necesario encapsular. La variable de longitud se puede exponer directamente sin efectos secundarios.

La razón por la que String usa un método en lugar de una variable es porque usa internamente un char[] que no quiere exponer públicamente (para inmutabilidad / encapsulación), por lo que envuelve la variable length en un método length() . Es la misma razón por la que ArrayList tiene un método size() lugar de una variable de length .

La única vez que usará la variable en lugar del método es con matrices. Todo lo demás serán métodos. Es decir, usarás los corchetes para todo excepto los arreglos.

La única manera verdadera de saber cuándo usar cuál es la experiencia. Aunque un IDE con autocompletado usualmente te ayudará cuando no lo recuerdes.

En su mayor parte (no siempre) array.length, System.out y System.err son los 3 más comunes con los que se encontrará que en realidad son acceso de miembros en lugar de llamadas a métodos.

 int[] myArray = new int[10]; String myString = "hello world!"; List myList = new ArrayList(); myArray.length //gives the length of the array myString.length() //gives the length of the string myList.size() //gives the length of the list 

Es muy probable que las cadenas y los arreglos se diseñaron en diferentes momentos y, por lo tanto, terminaron usando diferentes convenciones. Una justificación es que dado que las cadenas utilizan matrices internamente, se utilizó un método length () para evitar la duplicación de la misma información. En última instancia, esto es solo una inconsistencia que evolucionó y que definitivamente se solucionaría si el lenguaje se rediseñara alguna vez desde cero. :RE

La principal diferencia es que en el primer caso A) su Tipo de matriz, por ejemplo, int[] , Object[] , double[] , ect .. que tiene un campo público denominado longitud y el segundo caso B) es una Cadena de objetos que tiene una función llamada length() , la función podría haber sido llamada getLength() o alguna otra cosa. La longitud del campo público del tipo de matriz es probablemente una resaca de la forma en que C ++ hace las cosas.

Los tipos de matriz tienen lo siguiente:

  • La longitud del campo final público, que contiene el número de componentes de la matriz (la longitud puede ser positiva o cero)
  • El clon de método público, que anula el método del mismo nombre en la clase Objeto y no arroja excepciones marcadas
  • Todos los miembros heredados de la clase Object; El único método de Objeto que no se hereda es su método de clonación.

Echa un vistazo a esto, Tipos de matriz .

.length () es un método de una clase String y que devuelve el número de caracteres en la cadena.

.length dará la cantidad de elementos almacenados en una matriz.

 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 

length es una referencia de miembro de pseudodatos y solo funciona para matrices (small-a) (ignorando las clases que puede definir que implementan el miembro)

Todo lo demás es un objeto de una clase, y todas las clases JDK que tienen este concepto definen los métodos de instancia length() o size() . (Desearía que hubieran sido consistentes y hubieran escogido uno u otro, pero eso es agua sobre el puente).

Array.length es una propiedad de ese Array , similar a una referencia de variable.

ArrayList.size() es una llamada de método real al objeto de lista de matriz.