Foros del Web » Programación para mayores de 30 ;) » Java »

Pregunta existencial sobre arrays en Java

Estas en el tema de Pregunta existencial sobre arrays en Java en el foro de Java en Foros del Web. Hola muchachos, quisiera saber de que clase es un array: Ejemplo: (Es java no PHP) Código PHP: public static  void main ( String []  args ) {          ...
  #1 (permalink)  
Antiguo 05/05/2009, 10:30
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta existencial sobre arrays en Java

Hola muchachos, quisiera saber de que clase es un array:

Ejemplo:


(Es java no PHP)
Código PHP:
public static void main(String[] args) {
        
        
        
String textoSalida1 = new String ("Esto");
        
String textoSalida2 = new String ("es");
        
String textoSalida3 = new String ("un texto");
        
String textoSalida4 = new String ("de");
        
String textoSalida5 = new String ("salida");
        
        
String[] textoArray = new  String[5];
        
System.out.println(textoArray);

    } 
Yo quisiera saber de que tipo es textoArray. Ya que hay un pequeño problema, el problema se debe a que no se de que tipo es Array ya que cuando produzco un Syso.println se imprime el codigo hash de la JVM es decir Ljava.lang.String;@10b62c9. Yo dudo que sea de la Clase Object, pero como lo hace Java si lo fuera? ya que yo hice un String[] y no un new Object. Pero println lo recibe como Object. Ya se que todos los objetos en Java heredan de Object, pero array no se si es una clase, es decir como hereda de Object si no es una Clase?

Sera que array es una coleccion en memoria y nada mas y no es un objeto?

Muchas gracias.

Gracias
  #2 (permalink)  
Antiguo 05/05/2009, 10:55
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Pregunta existencial sobre arrays en Java

In Java, arrays are objects that store multiple variables of the same type, or variables that are all subclasses of the same type. Arrays can hold either primitives or object references, but the array itself will always be an object on the heap, even if the array is declared to hold primitive elements. In other words, there is no such thing as a primitive array, but you can make an array of primitives.
  #3 (permalink)  
Antiguo 05/05/2009, 11:22
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pregunta existencial sobre arrays en Java

Cuando haces s.o.print(objeto) lo que ocurre es que lo que se saca es objeto.toString(). Si el objeto no posee un método toString() propio (y así es con los arrays) entonces lo que se suele sacar (porque así lo hace Object) es el hash, que es lo que estás viendo.

Esto ocurre para cualquier cosa... Si tienes class Poing { }; Poing p = new Poing(); y haces un s.o.print(p) también te sacará el hash de ese objeto. No es que s.o.print() "lo reciba como Object", no. Lo recibe como lo que es. Pero cuando s.o.print() intente llamar a p.toString() y p no tenga un método toString() propio, entonces -por herencia- se termina llamando al toString() de Object.
  #4 (permalink)  
Antiguo 05/05/2009, 11:33
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Pregunta existencial sobre arrays en Java

Cita:
Iniciado por venkman Ver Mensaje
Cuando haces s.o.print(objeto) lo que ocurre es que lo que se saca es objeto.toString(). Si el objeto no posee un método toString() propio (y así es con los arrays) entonces lo que se suele sacar (porque así lo hace Object) es el hash, que es lo que estás viendo.

Esto ocurre para cualquier cosa... Si tienes class Poing { }; Poing p = new Poing(); y haces un s.o.print(p) también te sacará el hash de ese objeto. No es que s.o.print() "lo reciba como Object", no. Lo recibe como lo que es. Pero cuando s.o.print() intente llamar a p.toString() y p no tenga un método toString() propio, entonces -por herencia- se termina llamando al toString() de Object.
Pero al fin y al cabo array es un objeto? Por otro lado por lo que estuve viendo en el eclipse cuando me paro en el metodo println es que hay una sobrecarga en particular que es
Código Java:
Ver original
  1. public void println(java.lang.Object arg0);
que al parecer es la de objetos en general. Array entonces no es del tipo Object?
  #5 (permalink)  
Antiguo 05/05/2009, 11:52
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pregunta existencial sobre arrays en Java

A ver si así lo entiendes. Haz esto:

Código java:
Ver original
  1. class Si {
  2.     public String toString() { return "hola"; }
  3. }
  4. class No {
  5. }
  6.  
  7. Si s = new Si();
  8. No n = new No();

Ahora, haz
Código java:
Ver original
  1. System.out.println(s);
  2. System.out.println(n);
  #6 (permalink)  
Antiguo 05/05/2009, 12:03
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Pregunta existencial sobre arrays en Java

Si entendi perfectamente que si no sobrecargo el metodo toString de la clase no llama al de Object. Ahora array es una clase?
  #7 (permalink)  
Antiguo 05/05/2009, 12:14
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pregunta existencial sobre arrays en Java

No, un array no es ninguna clase, como ya te han dicho arriba. Son objetos.
  #8 (permalink)  
Antiguo 05/05/2009, 12:25
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Pregunta existencial sobre arrays en Java

Cita:
Iniciado por venkman Ver Mensaje
No, un array no es ninguna clase, como ya te han dicho arriba. Son objetos.
¿Eso quiere decir que son instancias de Object? Seria como un objeto que tiene el puntero a la primera direccion de memoria de los 5 Strings del array?

Muchas gracias y perdon por insistir tanto en el mismo tema!
  #9 (permalink)  
Antiguo 05/05/2009, 13:25
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pregunta existencial sobre arrays en Java

No sé si tienes clara cuál es la diferencia entre:

- Una clase
- Un objeto o instancia
- Object

Object es una clase. Es la clase Object. Igual que la clase String o que la clase Hashtable o la clase org.apache.struts.action.Action o la que sea. Es una clase.

Una clase es lo que usas para crear objetos. Es como una plantilla para crear objetos o instancias de un determinado tipo (o forma).

Cuando haces new String() o new Hashtable() o new org.apache.struts.action.Action() o new Object() estás usando esas clases para crear objetos o instancias de esa clase. Todos son objetos, cada uno de un tipo, y uno de esos tipos es Object.

Ahora, los arrays, como hemos dicho son objetos, pero no son objetos de ninguna clase. Son objetos internos de la JVM. Es decir, no hay una clase Array (******). Lo que hay es un mecanismo por el que cuando tú declaras String[] palabras = new String[5] se crea un objeto en la memoria que se encarga de guardar las referencias a 5 objetos dde tipo String. Ese objeto no es de la clase Object. Es un objeto que, digámoslo así, no tiene clase. Tampoco vamos a entrar aquí a ver cómo funciona internamente la VM proque no viene a cuento. Pero lo que importa es que no tiene nada que ver con la clase Object.


Por otro lado está el tema del s.o.print y el parámetro que recibe. espero que eso haya quedado claro. El asunto clave ahí, es que si le pasas un array a s.o.print nunca vas a sacar nada interesante para ti porque nunca le vas a poder poner al objeto de memoria de la VM que representa el array un método toString(). (******)




(******) Ojo, para confundir más aún, en realidad que existe una clase que se llama Arrays pero no tiene nada que ver con esta discusión. La clase Arrays no se usa para crear arrays.
(******) En realidad con esa clase Arrays podrías hacer algo bastante parecido, que sería esto:
Código java:
Ver original
  1. System.out.println( Arrays.toString(miarray) );
pero no es lo mismo porque ahí eres tú mismo el que primero está convirtiendo ek array en una cadena para después llamar a s.o.println
  #10 (permalink)  
Antiguo 05/05/2009, 13:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Pregunta existencial sobre arrays en Java

Para ser precisos, los arrays son objetos de una clase pero no de una que salga en el API, como dice Venkman son internas.

Si haces
Cita:
String[] str_array = new String[3];
System.err.println("Clase: " + str_array.getClass().getName());
Veras que la clase es [Ljava.lang.String;, la cual acabará heredando de Object.

Así que los arrays son objetos, como cualquier otra instancia en Java. Las unicas instancias en Java que no son objetos son los tipos primitivos.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #11 (permalink)  
Antiguo 06/05/2009, 07:28
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Pregunta existencial sobre arrays en Java

Muchisimas gracias por su tiempo, pero como era para una investigacióon me tenia que meter directamente dentro de la JVM para ver como creaba ese objeto array, por eso di tantas vueltas. Ahora entendi perfectamente que en realidad array es un objeto interno de la JVM y termina heredando de Object, es cierto es imposible que sea una instancia de la Clase Object porque no tendria sentido es decir nunca hago un new Object () cuando creo un array. Entonces al heredar de object cuando el metodo println llama a toString del array directamente llama al toString de Object.

Mas que perfecto.

Un saludo para Venkman y para GreenEyed.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:31.