No, en C ++ una matriz es una matriz y no no una matriz.
Kerrek SB
42
if (array instanceof Object) System.out.println("Yes!")
skaffman
6
Ah, y en C ++, tanto las matrices como los punteros son objetos.
R. Martinho Fernandes
2
@ R.MartinhoFernandes Todas las matrices de C ++ son objetos de C ++ de hecho, pero hay punteros de C ++ que no son objetos de C ++, es decir, todos los punteros que son el resultado de evaluar un rvalue. Los ejemplos incluyen &x, p+iy new int(42).
fredoverflow
1
@skaffman El mensaje no es estrictamente necesario, ya que no se compilaría de otra manera.
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í.
En el lenguaje de programación Java, las matrices son objetos (§4.3.1), se crean dinámicamente y pueden asignarse a variables de tipo Objeto (§4.3.2). Todos los métodos de la clase Object pueden invocarse en una matriz.
Si la matriz es un objeto, ¿no significa eso que es una instancia de una clase? Si es así, ¿puedo extender esa clase?
One Two Three
9
No, no lo hace: La especificación de Java escribe : "Un objeto 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 extiende debe incluir un ClassType.
También puede declarar int[] someIntegers = {42};, al mismo resultado.
Holger
7
Sí, es un objeto en Java.
También tenga en cuenta que cuando lo hace array.lengthno está invocando ningún método, sino simplemente accediendo al lengthcampo de la matriz . Hay muchos métodos estáticos en la clase Arrays .
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 manera ligeramente diferente en el nivel bajo.
Yo diría que la respuesta es sí, aunque podría agregar que, estrictamente hablando, una matriz también es un objeto en C ++. De §1.8 [intro.object] del estándar actual (FDIS):
Cada arreglo en java es un objeto ex int [] a = new int [2]; Entonces, new se usa para crear un objeto y, como es un objeto, podemos verificar el nombre de la clase simplemente usando a.getClass (). GetName ();
Una matriz no es una instancia de ninguna clase enumerada en el árbol de clases, sin embargo, cada matriz es un objeto y hereda directamente de java.util.Object
(newint[1])instanceofObject// -> evaluates to true
La clase java.util.Arrayses una clase auxiliar y las matrices no son instancias de esta clase.
Las matrices heredan todos los miembros de java.lang.Object
Las matrices anulan el método clone()heredado Object.
Las matrices implementan el campo length, que contiene el número de componentes de la matriz. la longitud puede ser positiva o cero. Es publicy final.
Las matrices implementan las interfaces Cloneabley java.io.Serializable.
8a. Las matrices son compatibles con Class<T>. Puede recuperar la Class<T>instancia de una instancia de matriz
(newint[2]).getClass()
o de un tipo de matriz
int[].class
8b. Se java.lang.Class<T>crea una instancia de clase de reflexión única (es decir, una instancia de ) para cada tipo de matriz diferente en su código. Ejemplos
Los miembros de un tipo de matriz son todos los siguientes:
El campo final público length, que contiene el número de componentes de la matriz. la longitud puede ser positiva o cero.
El método público clone, que anula el método del mismo nombre en la clase Objecty no arroja excepciones marcadas. El tipo de retorno del clonemétodo de un tipo de matriz T[]es T[].
Un clon de una matriz multidimensional es poco profundo, es decir, crea solo una nueva matriz. Los subarreglos se comparten.
Todos los miembros heredados de la clase Object; el único método de Object que no se hereda es su método de clonación.
if (array instanceof Object) System.out.println("Yes!")
&x
,p+i
ynew int(42)
.Respuestas:
Si.
La sección 4.3.1 de la especificación del lenguaje Java comienza con:
fuente
Si; la especificación del lenguaje Java escribe :
fuente
Bueno, ¡preguntemos a Java!
Salida:
fuente
int[] someIntegers = {42};
, al mismo resultado.Sí, es un objeto en Java.
También tenga en cuenta que cuando lo hace
array.length
no está invocando ningún método, sino simplemente accediendo allength
campo de la matriz . Hay muchos métodos estáticos en la clase Arrays .fuente
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 manera ligeramente diferente en el nivel bajo.
fuente
Yo diría que la respuesta es sí, aunque podría agregar que, estrictamente hablando, una matriz también es un objeto en C ++. De §1.8 [intro.object] del estándar actual (FDIS):
fuente
Solo quiero agregar que las matrices tienen una representación en la API de reflexión: java.lang.reflect.Array .
fuente
Cada arreglo en java es un objeto ex int [] a = new int [2]; Entonces, new se usa para crear un objeto y, como es un objeto, podemos verificar el nombre de la clase simplemente usando a.getClass (). GetName ();
fuente
java.util.Object
java.util.Arrays
es una clase auxiliar y las matrices no son instancias de esta clase.java.lang.reflect.Array
es una clase auxiliar y las matrices no son instancias de esta clase.Las matrices heredan todos los miembros de
java.lang.Object
Las matrices anulan el método
clone()
heredadoObject
.Las matrices implementan el campo
length
, que contiene el número de componentes de la matriz. la longitud puede ser positiva o cero. Espublic
yfinal
.Las matrices implementan las interfaces
Cloneable
yjava.io.Serializable
.8a. Las matrices son compatibles con
Class<T>
. Puede recuperar laClass<T>
instancia de una instancia de matrizo de un tipo de matriz
8b. Se
java.lang.Class<T>
crea una instancia de clase de reflexión única (es decir, una instancia de ) para cada tipo de matriz diferente en su código. EjemplosREFERENCIAS
De la especificación Java Sección 4.3.1 Objetos
Un objeto 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.
Una matriz se crea explícitamente mediante una expresión de creación de matriz.
De java.util.Arrays
De java.lang.reflect.Array
De la Sección 10.1 Objetos
La superclase directa de un tipo de matriz es
Object
.Cada tipo de matriz implementa las interfaces
Cloneable
yjava.io.Serializable
.De Sección 10.7 Miembros de la matriz
Los miembros de un tipo de matriz son todos los siguientes:
El campo final público
length
, que contiene el número de componentes de la matriz. la longitud puede ser positiva o cero.El método público
clone
, que anula el método del mismo nombre en la claseObject
y no arroja excepciones marcadas. El tipo de retorno delclone
método de un tipo de matrizT[]
esT[]
.Un clon de una matriz multidimensional es poco profundo, es decir, crea solo una nueva matriz. Los subarreglos se comparten.
Todos los miembros heredados de la clase Object; el único método de Object que no se hereda es su método de clonación.
fuente
Las matrices de cualquier cosa son objetos. Uno puede llamar a métodos como
equals
,hashcode
etc:No se pueden llamar métodos en un tipo nativo.
fuente
Observe el siguiente fragmento de código y la salida.
}
claramente la matriz a se trata como un objeto.
fuente