黑马程序员技术交流社区

标题: 关于JAVA toString 方法的重写 [打印本页]

作者: che201311    时间: 2013-12-8 19:58
标题: 关于JAVA toString 方法的重写
  1. 我是初学者哈   
  2. public class Circle {
  3. double r;
  4. public Circle(double r)
  5. {
  6. this.r=r;
  7. }
  8. public String toString()
  9. {
  10. double area=r*r*Math.PI;
  11. return" "+area;
  12. }

  13. }
复制代码

返回一个值时为什么不能写  return area;   要加上" "+area?
作者: 赵青超    时间: 2013-12-8 20:01
public class Circle {
double r;
public Circle(double r)
{
this.r=r;
}
public String toString() //看这里,返回值是String
{
double area=r*r*Math.PI;  //看这里,area是double类型
return" "+area;  //返回值是String类型," "+area就是把area转成String,也可以这样写:area+""
}

}
作者: lichao    时间: 2013-12-8 20:19
  1. public String toString()//这里你定义的返回值类型为String
  2. {
  3. double area=r*r*Math.PI;//你定义的area为double类型
  4. return" "+area; //这里是返回值,返回值类型要与方法定义的返回值类型相同,而area为double不是String类型明显不同,任何类型数据+String类型(String类型+任何类型数据)的数据都变为String型数据,所以“”+area就变成String类型数据了,符合方法定义的数据类型了
  5. }
复制代码

作者: time_out    时间: 2013-12-8 20:30
因为你定义了area是double类型,而toString()方法的返回值是String类型,所以直接返回area会出错;而写成""+area就不同了,因为"+"被重载了,它会把由"+"连接的值都转换为字符串然后拼接;""+area为String类型,符合方法定义的返回值类型;所以要加上""。

作者: 李然    时间: 2013-12-9 15:37
因为double area=r*r*Math.PI计算出来的的area是double的,如果你在代码中写return area,函数的返回值类型写成String型,就造成了你要返回数据的类型和你定义的返回值的类型匹配不上,jvm肯定会编译错误,你加了 "“+area就是把area转成String。最格式的的修改方法可以是把toString()的返回值类型改成String。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2