En java podemos declarar una matriz como
String[] array = new String[10];
int size = array.length;
¿Significa esto que la matriz en sí es un objeto? Porque en C ++ una matriz es solo un puntero y no tiene ningún método.
En java podemos declarar una matriz como
String[] array = new String[10];
int size = array.length;
¿Significa esto que la matriz en sí es un objeto? Porque en C ++ una matriz es solo un puntero y no tiene ningún método.
if (array instanceof Object) System.out.println("Yes!")
&x, p+iy new int(42).
Respuestas:
Si.
La sección 4.3.1 de la especificación del lenguaje Java comienza con:
Un objeto es una instancia de clase o una matriz.
Si; la especificación del lenguaje Java escribe :
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.
Bueno, ¡preguntemos 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);
}
}
Salida:
true
true
int[] someIntegers = {42};, al mismo resultado.
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 .
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):
Un objeto es una región de almacenamiento.
Solo quiero agregar que las matrices tienen una representación en la API de reflexión: java.lang.reflect.Array .
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 ();
java.util.Object(new int[1]) instanceof Object // -> evaluates to true
java.util.Arrayses una clase auxiliar y las matrices no son instancias de esta clase.(new int[1]) instanceof java.util.Arrays // -> compile error
java.lang.reflect.Arrayes una clase auxiliar y las matrices no son instancias de esta clase.(new int[1]) instanceof java.lang.reflect.Array // -> compile error
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
(new int[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
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
REFERENCIAS
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 la Sección 10.1 Objetos
La superclase directa de un tipo de matriz es Object.
Cada tipo de matriz implementa las interfaces Cloneabley java.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 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.
Las matrices de cualquier cosa son objetos. Uno puede llamar a métodos como equals, hashcodeetc:
final int[] i = {};
i.equals(new int[] {1}); // false
i.hashcode();
No se pueden llamar métodos en un tipo nativo.
Observe el siguiente fragmento de código y la salida.
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)
}
}
claramente la matriz a se trata como un objeto.