关键在这里: public Point(Object x, Object y) 既然都Object了,那么传啥进去都行。再一个,toString方法是从Object继承过来的,有的类重写过,有的类没有重写,因此不存在转型的问题。比如,Integer类重写过toString(),所以System.out.println(new Integer(1).toString())的结果就是“1”。没重写的,toString()的结果就是对象的地址了。
2楼回答已经很详细了,楼主可以去看看Object类的toString 方法。
public class Position { private Object a; /** * @return the a */ public Object getA() { return a; } /** * @param a the a to set */ public void setA(Object a) { this.a = a; } public Position(Object a) { this.a = a; } } 定义一个这样的类,如果不重写toString(),然后 Point point4 = new Point(new Position(1), "北纬30度"); System.out.println(point4.toString()); 调用。结果就是:Point [x=Position@5483cd, y=北纬30度] 这就是你说的异常吧。
为什么下面的会报错啊? class Point{ private Object x; private Object y; public Point(Object x, Object y) { this.x = x; this.y = y; } public Object getX() { return x; } public Object getY() { return y; } } public class Testfanxing { public static void main(String[] args) { // TODO 自动生成的方法存根 Point point2 = new Point(1.2,"北纬100"); String str1 =(String)point2.getX(); String str2 =(String)point2.getY(); System.out.println(str1 + " " +str2); } }
public Point(Object x, Object y) 既然都Object了,那么传啥进去都行。再一个,toString方法是从Object继承过来的,有的类重写过,有的类没有重写,因此不存在转型的问题。比如,Integer类重写过toString(),所以System.out.println(new Integer(1).toString())的结果就是“1”。没重写的,toString()的结果就是对象的地址了。
private Object a; /**
* @return the a
*/
public Object getA() {
return a;
} /**
* @param a the a to set
*/
public void setA(Object a) {
this.a = a;
} public Position(Object a) {
this.a = a;
}
}
定义一个这样的类,如果不重写toString(),然后
Point point4 = new Point(new Position(1), "北纬30度");
System.out.println(point4.toString());
调用。结果就是:Point [x=Position@5483cd, y=北纬30度]
这就是你说的异常吧。
class Point{
private Object x;
private Object y;
public Point(Object x, Object y) {
this.x = x;
this.y = y;
}
public Object getX() {
return x;
}
public Object getY() {
return y;
}
}
public class Testfanxing {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Point point2 = new Point(1.2,"北纬100");
String str1 =(String)point2.getX();
String str2 =(String)point2.getY();
System.out.println(str1 + " " +str2);
}
}
int自动封装后变为Integer,再向上转型变为Object,然后变成了String类型,为什么不报错啊?
新手,刚刚开始学java,谢谢la
print
public void print(Object obj)打印对象。按照平台的默认字符串编码将 String.valueOf(Object) 方法生成的字符串转换为字节,并完全以 write(int) 方法的方式写入这些字节。 参数:
obj - 要打印的 Object
另请参见:
Object.toString()valueOf
public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。 参数:
obj - 一个 Object。
返回:
如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
另请参见:
Object.toString()
Integer 的 toString 就是返回当前数值的String 形式。
int自动封装后变为Integer,再向上转型变为Object,然后变成了String类型,为什么不报错啊?
新手,刚刚开始学java,谢谢la
不报错的原因是System.out.print方法会自动调用参数的toString方法。另外,String的加号运算符也被重载过,会自动调用其它参数的toString方法。而toString方法是任何对象都有的,所以,不会报错。
返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:getClass().getName() + '@' + Integer.toHexString(hashCode())
返回:
该对象的字符串表示形式。