Java - Arreglos y Objetos

 
Vista:

Arreglos y Objetos

Publicado por Clayder (10 intervenciones) el 18/10/2008 20:45:52
Hola:

Me surgio una duda con respecto a este tema. Segun lei por ahi, un arreglo tiene los mismos atributos de un objeto en Java. Sin embargo cuando quise comprobar eso me quede con algunas dudas. En el siguiente programa, tengo primero objetos de tipo Object, estos SI me permiten igualarlos, al igual como haría con un puntero y un arreglo en C, ahora, cuando lo hago con String, el compilador me bota error.

[code]
public class PruebaArreglo
{
public static void main(String args[])
{
Object o1[] = new Object[2];
o1[0] = "HOla";
o1[1] = "Mundo";
Object o2 = new Object();
o2=o1;

String s1[] = new String[2];
s1[0] = "Hola";
s1[1] = "Clayder";
String s2 = new String();
s2 = s1;
}
}
[/code]

Otra duda que tengo es el campo length de los arreglos. Por ejemplo, si tengo:

[code]
int a[] = new int[2];
int n = a.length;
[/code]

¿De donde sale ese campo length?, no lo he visto en ninguna parte de la documentacion de la API de Java. Y como es que Java reconoce el tamaño de un arreglo y el lenguaje C no puede. ¿Acaso los arreglos en java tienen una bandera que les indique el elemento final para que puedan acceder a su tamaño solo con la propiedad length? o en todo caso ¿como hicieron eso o donde puedo hallar informacion sobre ello?

Gracias de antemano.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Arreglos y Objetos

Publicado por Gilberto (378 intervenciones) el 18/10/2008 21:10:20
Como tu dijiste, un arreglo tiene las mísmas propiedades que un objeto, ya que se le considera un objeto, y se le pueden aplicar los mísmos métodos que a este (getClass,toString,wait,equals,hasCode), y a una referencia a un objeto puro (de la clase Object) puede asignarsele una instancia de cualquier Objeto java, por lo que es correcto que se le asigne una instancia de un array. En cambio, una instancia de String no representa de modo alguno un arreglo, aún de Strings, por lo que es erroneo asignarle cualquier otro objeto que no sea de la mísma clase u otra derivada de esta (recuerda la herancia). Para una pequeña explicación de los arrays consulta:

http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/parte4/cap4-3.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Arreglos y Objetos

Publicado por Carlos G. Gavidia (11 intervenciones) el 18/10/2008 22:50:20
Sólo para afinar lo dicho por Gilberto....

Los Arrays, como todo en Java, son objetos; por lo tanto tienen métodos y atributos (incluido el atributo length). Es por esa razón, que en la jerarquía de herencia java todos los objetos tienen como superclase a la clase Object (tanto String como Array). Por lo tanto, esta sentencia es correcta:

Object o1[] = new Object[2];
Object o2 = new Object();
o2=o1;

Dado que estamos asignando a una variable de referencia de la clase padre (o2: Object), una instancia de la clase hija (o1: Array (de Objects)). Sin embargo, esta sentencia si nos arroja errores de compilación:

String s1[] = new String[2];
String s2 = new String();
s2 = s1;

Dado s1 (Array (de Strings)) ni s2 (String) no tienen ancentros comunes en la jerarquía de herencia. Es que como querer asignarle un String a una variable de tipo int.

Espero esté ahora más claro.

Carlos G. Gavidia
SCJP - SCWCD
http://certified-es.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Arreglos y Objetos

Publicado por Clayder (10 intervenciones) el 20/10/2008 18:40:52
Hola Carlos:

Gracias por tu respuesta, pero hay algo que no entendí, "length" es un atributo?, porque en la documentacion de la API de java no esta y ademas tampoco puedo hacer length sobre un objeto cualquiera.

Gracias por tu respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Arreglos y Objetos

Publicado por Carlos G. Gavidia (11 intervenciones) el 20/10/2008 20:00:49
Así es, en Java los arreglos son objetos creados dinámicamente y la longitud de dicho arreglo se almacena una variable de instancia (atributo) final (es decir, su valor no puede ser cambiado) llamada length. Para más información revisar: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

Saludos,

Carlos G. Gavidia
SCJP - SCWCD
http://certified-es.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Arreglos y Objetos

Publicado por Clayder (10 intervenciones) el 20/10/2008 21:49:01
Gracias por la informacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar