下面代码为什么不出现类转换异常,刚学java,请详细点,谢谢啦。

1213333 2014-02-28 10:49:39
class Point {
private Object x;
private Object y;
public Point(Object x, Object y) {
this.x = x;
this.y = y;
}
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
public class Testfanxing {
public static void main(String[] args) {
Point point1 = new Point(1, 1);
System.out.println(point1.toString());
Point point2 = new Point(1.2, "北纬30度");
System.out.println(point2.toString());
Point point3 = new Point("东经100度", "北纬30度");
System.out.println(point3.toString());
}
}
toString中是不是存在向下转型啊? 如果有为什么不出现类转换异常。
...全文
180 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
anod 2014-03-01
  • 打赏
  • 举报
回复
引用 6 楼 u011909830 的回复:
[quote=引用 2 楼 anod 的回复:] 关键在这里: public Point(Object x, Object y) 既然都Object了,那么传啥进去都行。再一个,toString方法是从Object继承过来的,有的类重写过,有的类没有重写,因此不存在转型的问题。 比如,Integer类重写过toString(),所以System.out.println(new Integer(1).toString())的结果就是“1”。没重写的,toString()的结果就是对象的地址了。
int自动封装后变为Integer,再向上转型变为Object,然后变成了String类型,为什么不报错啊? 新手,刚刚开始学java,谢谢la [/quote] 不报错的原因是System.out.print方法会自动调用参数的toString方法。另外,String的加号运算符也被重载过,会自动调用其它参数的toString方法。而toString方法是任何对象都有的,所以,不会报错。
zmbc48 2014-03-01
  • 打赏
  • 举报
回复
toString public String toString() 返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。 Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode()) 返回: 该对象的字符串表示形式。
姜小白- 2014-02-28
  • 打赏
  • 举报
回复

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 形式。
1213333 2014-02-28
  • 打赏
  • 举报
回复
引用 2 楼 anod 的回复:
关键在这里: public Point(Object x, Object y) 既然都Object了,那么传啥进去都行。再一个,toString方法是从Object继承过来的,有的类重写过,有的类没有重写,因此不存在转型的问题。 比如,Integer类重写过toString(),所以System.out.println(new Integer(1).toString())的结果就是“1”。没重写的,toString()的结果就是对象的地址了。
int自动封装后变为Integer,再向上转型变为Object,然后变成了String类型,为什么不报错啊? 新手,刚刚开始学java,谢谢la
1213333 2014-02-28
  • 打赏
  • 举报
回复
为什么下面的会报错啊? 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); } }
壮壮装壮 2014-02-28
  • 打赏
  • 举报
回复
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度] 这就是你说的异常吧。
姜小白- 2014-02-28
  • 打赏
  • 举报
回复
2楼回答已经很详细了,楼主可以去看看Object类的toString 方法。
anod 2014-02-28
  • 打赏
  • 举报
回复
关键在这里: public Point(Object x, Object y) 既然都Object了,那么传啥进去都行。再一个,toString方法是从Object继承过来的,有的类重写过,有的类没有重写,因此不存在转型的问题。 比如,Integer类重写过toString(),所以System.out.println(new Integer(1).toString())的结果就是“1”。没重写的,toString()的结果就是对象的地址了。
tony4geek 2014-02-28
  • 打赏
  • 举报
回复
重写 toString 什么异常。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧