Java - Una dudilla

 
Vista:

Una dudilla

Publicado por Edurne (1 intervención) el 10/10/2005 13:47:29
Estoy aprendiendo a programar java y no entiendo este ejemplo, la salida al ejecutarlo es:

p = NewPoint[123456789,2147483647], entiendo todo el proceso pero no entiendo en que momento thawed se convierte en una cadena , porque se ejecuta toString sin llamarla, cuando lo logico sería poner en el System.out.println("p = " +thawed.toString()); y no thawed solo. Muchas gracias

El código es este
-----------------------

interface Packable{
byte[] pack();
void unpack(byte raw[]);
}
class Point{
int x, y;
Point(int x, int y){
this.x=x;
this.y=y;
}
}
class NewPoint extends Point implements Packable{
NewPoint(int x, int y){
super(x, y);
}
NewPoint(){
this(0, 0);
}
private byte p(int t, int n){
return (byte)((t>>n) & 0xff);
}
public byte pack()[]{
byte ret[]=new byte[8];
ret[0]= p(x, 24);
ret[1]= p(x, 16);
ret[2]= p(x, 8);
ret[3]= p(x, 0);
ret[4]= p(y, 24);
ret[5]= p(y, 16);
ret[6]= p(y, 8);
ret[7]= p(y, 0);
return ret;
}
private int u(byte b, int n){
return (b & 0xff)<<n;
}
public void unpack(byte raw[]){
x=u(raw[0], 24) | u(raw[1], 16) | u(raw[2], 8) | u(raw[3], 0);
y=u(raw[4], 24) | u(raw[5], 16) | u(raw[6], 8) | u(raw[7], 0);
}
public String toString(){
return "NewPoint[" + x + "," + y + "]";
}
}
class PointPack{
public static void main (String args[]){
Packable p= new NewPoint(123456789, 2147483647);
byte packed[] =p.pack();
NewPoint thawed= new NewPoint();
thawed.unpack(packed);
System.out.println("p = " +thawed);
}
}
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
sin imagen de perfil

RE:Una dudilla

Publicado por chuidiang (950 intervenciones) el 10/10/2005 14:15:09
Hola:

Al toString() se le llama solo en varias ocasiones. Algunas que se me ocurren
Cuando lo metes en un System.out.println(), puesto que lo que se debe escribir en pantalla al final es una cadena, se le llama.
Si se lo sumas a un String, también se llama al toString().
En algunos objetos que admiten Object, si lo necesitan llaman al toString(). Por ejemplo, si lo pones como dato dentro de un JTable y no haces ningun render especifico o se lo pasas a un JLabel.

En tu ejemplo, ¿qué pretendes que haga System.out.println("p = " +thawed) si no se llama automaticamente al toString() de thawed?

Se bueno.
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