Différence entre length et length() en Java

Dans les IDEs modernes on trouve la fonctionnalité autocompletion qui propose des mots clés Java ou des variables déclarées dans notre classe, et sans cette fonctionnalité, comment connaitre la taille d'un tableau ? Et comment connaitre la taille d'un String ? Les développeurs de tout niveau (débutant ou expert) n'arrivent pas à distinguer entre lenght et lenght() correctement, et puisque l'IDE corrige ce problème, il reste toujours incompréhensible. Dans cet article on va voir quelques concepts sur les tableaux les strings en Java.

La réponse la plus simple est que lenght est utilisée pour récupérer la taille d'un tableau, et lenght() est une méthode qui renvoie la taille d'un string.

int[] tableau = new int[5];
System.out.println(tableau.length);//length pour les tableaux

String str = "chaîne de caractères";
System.out.println(str.length()); //length() pour les string
La question est pourquoi le tableau a un attribut lenght mais pas string et vice-vers-ça ?

Pourquoi les tableaux en Java ont la propriété lenght?

Un tableau est un conteneur d'objets d'un type précis qui stocke un nombre limité d'éléments.Une fois que le tableau est créé, sa taille ne changera jamais et reste fixe. C'est pour ça que l'attribut lenght est déclaré comme une variable final et c'est pourquoi lenght est considéré comme un attribut qui définit un tableau lors de sa création.

Un tableau peut être créé avec deux méthodes:
  1. Initialiser un nouveau tableau avec des valeurs.
  2. Instancier un nouveau tableau en spécifiant sa taille.
L'initialisation d'un tableau avec des valeurs crée un nouveau tableau avec une taille correspondant au nombre d'éléments séparés par des virgules.

int[] tab = {1,2,3};

La deuxième méthode consiste à instancier un nouveau tableau en précisant le type, le nombre d'éléments:

String[] tab = new String[3];

Pourquoi il n'y a pas de classe Array définie comme String ?

Un tableau est un objet et chaque tableau a une classe Object associée, l'instruction suivante est légale:

Object obj = new String[20];
Un tableau englobe toutes les méthodes et attributs hérités de la classe Object (à l’exception de clone). Pourquoi il n'existe pas une définition de la classe Array? On n'arrive pas de trouver la définition de la classe Array, une explication est qu'elle est cachée de nous. Si vous en pensez un peu, s'il y a une classe Array, elle ressemblait à quoi? Elle aurait encore besoin d'un tableau pour stocker les éléments, pas vrai ? C'est pourquoi que c'est une mauvaise idée de définir une tel classe. En fait, on peut obtenir la classe d'un tableau en appelant la méthode getClass():

int[] tab = new int[2];
System.out.println(tab.getClass());
Sortie:

class [I

Pourquoi String a la méthode length()?

La structure de données d'un String est un tableau de Char. Il est inutile de définir un attribut qui n'est pas nécessaire pour chaque application. Contrairement au langage C, un tableau de caractères n'est pas un String en Java. String est de nature dynamique, ce qui n'est pas le cas de l'attribut length. Les concepteurs de java ont en pensé et ils ont décidé de faciliter et éviter les erreurs pour les développeurs en créant la méthode length().

Références:
Javadoc: Arrays
StackOverFlow: Why isn't there a java.lang.Array class?