En java, nous pouvons déclarer un tableau comme
String[] array = new String[10];
int size = array.length;
Cela signifie-t-il que le tableau lui-même est un objet? Parce qu'en C ++, un tableau n'est qu'un pointeur et n'a aucune méthode.
En java, nous pouvons déclarer un tableau comme
String[] array = new String[10];
int size = array.length;
Cela signifie-t-il que le tableau lui-même est un objet? Parce qu'en C ++, un tableau n'est qu'un pointeur et n'a aucune méthode.
if (array instanceof Object) System.out.println("Yes!")
&x, p+iet new int(42).
Réponses:
Oui.
La section 4.3.1 de spécification du langage Java commence par:
Un objet est une instance de classe ou un tableau.
Oui; la spécification du langage Java écrit :
Dans le langage de programmation Java, les tableaux sont des objets (§4.3.1), sont créés dynamiquement, et peuvent être affectés à des variables de type Object (§4.3.2). Toutes les méthodes de la classe Object peuvent être appelées sur un tableau.
Eh bien, demandons à Java!
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(args instanceof Object);
int[] someIntegers = new int[] {42};
System.out.println(someIntegers instanceof Object);
}
}
Production:
true
true
int[] someIntegers = {42};, au même résultat.
Oui, c'est un objet en Java.
Notez également que lorsque vous le faites, array.lengthvous n'appelez aucune méthode mais vous accédez simplement au lengthchamp du tableau . Il existe de nombreuses méthodes statiques dans la classe Arrays .
Je dirais que la réponse est oui, même si je pourrais ajouter que, à proprement parler, un tableau est également un objet en C ++. À partir du §1.8 [intro.object] de la norme actuelle (FDIS):
Un objet est une région de stockage.
Je veux juste ajouter que les tableaux ont une représentation dans l'API de réflexion - java.lang.reflect.Array .
Chaque tableau en java est un objet ex int [] a = new int [2]; Donc, new est utilisé pour créer un objet et comme c'est un objet, nous pouvons vérifier le nom de la classe en utilisant simplement a.getClass (). GetName ();
java.util.Object(new int[1]) instanceof Object // -> evaluates to true
java.util.Arraysest une classe d'assistance et les tableaux ne sont pas des instances de cette classe.(new int[1]) instanceof java.util.Arrays // -> compile error
java.lang.reflect.Arrayest une classe d'assistance et les tableaux ne sont pas des instances de cette classe.(new int[1]) instanceof java.lang.reflect.Array // -> compile error
Les tableaux héritent de tous les membres de java.lang.Object
Les tableaux remplacent la méthode clone()héritée de Object.
Les tableaux implémentent le champ length, qui contient le nombre de composants du tableau. la longueur peut être positive ou nulle. C'est publicet final.
Les tableaux implémentent les interfaces Cloneableet java.io.Serializable.
8a. Les tableaux sont pris en charge par Class<T>. Vous pouvez récupérer l' Class<T>instance à partir d'une instance de tableau
(new int[2]).getClass()
ou à partir d'un type de tableau
int[].class
8b. Une instance de classe de réflexion unique (c'est-à-dire une instance de java.lang.Class<T>) est créée pour chaque type de tableau différent dans votre code. Exemples
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
RÉFÉRENCES
À partir de la spécification Java Section 4.3.1 Objets
Un objet est une instance de classe ou un tableau.
Une instance de classe est explicitement créée par une expression de création d'instance de classe.
Un tableau est créé explicitement par une expression de création de tableau.
De la section 10.1 Objets
La superclasse directe d'un type de tableau est Object.
Chaque type de tableau implémente les interfaces Cloneableet java.io.Serializable.
À partir de la section 10.7 Membres du groupe
Les membres d'un type de tableau sont tous les suivants:
Le champ final public length, qui contient le nombre de composants du tableau. la longueur peut être positive ou nulle.
La méthode publique clone, qui remplace la méthode du même nom dans la classe Objectet ne lève aucune exception vérifiée. Le type de retour de la cloneméthode d'un type tableau T[]est T[].
Un clone d'un tableau multidimensionnel est peu profond, c'est-à-dire qu'il ne crée qu'un seul nouveau tableau. Les sous-tableaux sont partagés.
Tous les membres hérités de la classe Object; la seule méthode d'Object qui n'est pas héritée est sa méthode de clonage.
Les tableaux de n'importe quoi sont des objets. On peut appeler des méthodes telles que equals, hashcodeetc:
final int[] i = {};
i.equals(new int[] {1}); // false
i.hashcode();
On ne peut pas appeler de méthodes sur un type natif.
Observez ci-dessous l'extrait de code et la sortie.
public class Tester {
int a[];
public static void main(String[] args) {
System.out.println(new Tester().a);// null
System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10)
}
}
clairement le tableau a est traité comme un objet.