2012-01-08 6 views
69

en Java podemos declarar una matriz comoes una matriz de un objeto en java

String[] array = new String[10]; 
int size = array.length; 

¿Quiere esto decir que la matriz en sí es un objeto? Porque en C++ una matriz es solo un puntero y no tiene ningún método.

+5

No, en C++ Una matriz es una matriz, y no no una matriz. –

+37

'if (array instanceof Object) System.out.println (" Yes! ")' – skaffman

+6

Ah, y en C++, tanto las matrices como los punteros son objetos. –

Respuesta

164

Sí.

The Java Language Specification section 4.3.1 comienza con:

Un objeto es una instancia de clase o una matriz.

+1

Hasta ahora siempre asumí que un objeto era sinónimo de instancia de clase y que las matrices eran una característica especial del lenguaje o algo así. – Ruben9922

48

Sí; la especificación del lenguaje Java writes:

En el lenguaje de programación Java, los arrays son objetos (§4.3.1), se crean dinámicamente y se puede asignar a las variables de tipo Object (§4.3.2). Todos los métodos de clase Object pueden invocarse en una matriz.

+0

Si array es un objeto, ¿no quiere decir que es una instancia de una clase? Si es así, ¿puedo extender esa clase? –

+5

No, no: las especificaciones de Java [escribe] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.3.1): "An object es una instancia de clase o una matriz. Una instancia de clase se crea explícitamente mediante una expresión de creación de instancia de clase (§15.9). Una matriz se crea explícitamente mediante una expresión de creación de matriz (§15.10). ". Y no, no puede extender una matriz, porque la cláusula extends [debe] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.4) presenta un ClassType. – meriton

2

Diría que la respuesta es sí, aunque podría añadir que, estrictamente hablando, una matriz también es un objeto en C++. De §1.8 [intro.object] de la norma actual (FDIS):

Un objeto es una región de almacenamiento.

5

Sí, es un objeto en Java.

También tenga en cuenta que cuando hace array.length no está invocando ningún método, sino simplemente accediendo al campo length de la matriz. Hay muchos métodos estáticos en la clase Arrays.

2

Sería importante tener en cuenta que las matrices en Java tienen sus propios códigos de bytes que no comparten con los objetos. Ciertamente son Objetos, pero se manejan de forma ligeramente diferente en el nivel bajo.

0

Cada matriz en java es un objeto ex int [] a = new int [2]; Tan nuevo se usa para crear un objeto y como es un objeto, podemos verificar el nombre de clase simplemente usando a.getClass(). GetName();

21

Bien, ¡pregúntale a 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); 
    } 
} 

de salida:

true 
true 
Cuestiones relacionadas