2015-06-25 14 views
6

Gli array sono oggetti e tutti gli oggetti provengono da una classe. Se eseguo il seguente codice:Qual è la classe degli array in Java

public class Test { 
    public static void main(String[] args) { 
     String str = "Hello"; 
     System.out.println(str.getClass()); 
    } 
} 

l'uscita è class java.lang.String.

Ma se eseguire il seguente:

public class Test { 
    public static void main(String[] args) { 
     int arr[] = new int[10]; 
     System.out.println(arr.getClass()); 
    } 
} 

l'uscita è class [I.

Le mie domande sono:

  1. Qual è la classe delle matrici?
  2. Perché è il risultato?
  3. Se desidero utilizzare l'operatore instanceof come dovrei usarlo? Se eseguo System.out.println(arr instanceof Object);, funziona perfettamente.
+3

Controllare [questo out] (http://stackoverflow.com/questions/6867131/getclass-method-java-with-array-types). È un duplicato per le tue prime due domande. –

+1

Dai un'occhiata a questa domanda http://stackoverflow.com/questions/12806739/is-an-array-a-primitive-type-or-an-object-or-something-else-entely – bhspencer

+0

Grazie per le modifiche –

risposta

4

This is all specified in the JLS. Gli array vengono creati dinamicamente con Object s che implementano Serializable e Cloneable.

La ragione per cui si vede che si imbatte è dovuta al modo in cui l'oggetto è represented in Class#getName.

perché è possibile utilizzare instanceof with reifiable Object types, e un array è molto reifiable (cioè concreto, non generica), è possibile utilizzare instanceof con gli array:

System.out.println(arr instanceof int[]); // true 
System.out.println(arr instanceof String[]); // false 

Il problema con il arr instance Object è che non è <X> instanceof Object utile, dal tutto è un Object (eccetto le primitive, ma usare instanceof con le primitive è un errore in fase di compilazione).

+0

Grazie a @TJCrowder, questo è un ottimo esempio da aggiungere a questo. – Makoto

+0

Grazie Era molto chiaro :) –

1

Aggiungendo alla altra risposta, il tipo può effettivamente essere decodificati utilizzando la stringa che hai come desscribed in JVMS: Chapter 4. The class File Format:

B byte signed byte 
C char Unicode character code point in the Basic Multilingual Plane, encoded with UTF-16 
D double double-precision floating-point value 
F float single-precision floating-point value 
I int  integer 
J long long integer 
L ClassName ; reference an instance of class ClassName 
S short signed short 
Z boolean  true or false 
[ reference one array dimension 

Che cosa avete ottenuto era class [I. Quindi, [, che è una dimensione di matrice e I che è un numero intero. Un array di numeri interi descrive il tipo.

Problemi correlati