我对虚空和回归有一些“困惑”。一般来说,我理解void在方法中使用而不返回任何东西,当我想将某些内容返回给调用代码时,返回用于方法。
但是在下面的代码中,我可以使用两者,我的问题是,使用哪一个?以及如何确定?它是关于性能的吗?
通常情况下,我在两种情况下都有相同的结果。
public class Calc {
private double number;
Calc (double n)
{
number = n;
}
public void add(double n)
{
number += n;
}
public double add1(double n)
{
return number = number + n;
}
}
谢谢!
答案 0 :(得分:4)
此方法:
public void add(double n)
{
number += n;
}
您更改了number
的内部状态,但此方法的调用者不知道number
的最终值。
在下面的方法中,您正在向调用者暗示number
的最终值。
public double add1(double n)
{
return number = number + n;
}
我建议保留一个单独的getNumber()
getter方法。
答案 1 :(得分:2)
你想写这个吗?
Calc c = new Calc();
double a = c.add(3);
如果是,请保留add1
方法。在您的对象中使用返回值的一种更好的方法如下:
public class Calc {
....
public Calc add(double d) { number += d; return this; }
}
现在你可以写
了Calc c = new Calc().add(1).add(2);
这很多次非常方便,读取得很好,并保留了垂直屏幕空间。
这个成语被称为流利的API 。
答案 2 :(得分:1)
在虚方法中:
public void add(double n)
{
number += n;
}
您无法跨方法使用n
变量。这意味着您将无法将其用于Calc
方法。
但是,当使用实际返回某些内容的方法时,例如:
public double add1(double n)
{
return number = number + n;
}
你可以将该变量用作一个对象,这样你就可以在Calc
方法和其他方法中多次使用它,每次都可能是同一个对象(如果用于计算,则不建议使用不同的值)或每次都有一个新的对象。
据我所知,没有明显的表演问题。
答案 3 :(得分:0)
我个人更喜欢返回一个值。它允许您以很少或没有成本的方式向调用代码提供信息(性能通常大致相同)。它可以是计算的结果,也可以是Mark提到的允许您将语句链接在一起的对象。哪一个可能取决于您的具体应用。
答案 4 :(得分:0)
return
不应与void类类型一起使用,因为默认情况下返回程序输出,并且可以通过java类的适当方法显示,例如当您想要显示程序的输出时:
System.out.println("number = " + number);
答案 5 :(得分:0)
你有这样的功能定义: -public(或私有等)-lvl访问。 -static(或空白)访问该方法而不创建该对象的实例。 -and void:你注意到任何返回内容的函数都有定义中包含的'某些'数据类型(例如:返回int值或字符串)。现在,当您的函数没有返回时,请将VOID视为数据类型(int,string等)的占位符
答案 6 :(得分:-1)
以这种方式思考: 如果您从代码中删除以下内容,您认为您的课程有用吗?
public double add1(double n)
{
return number = number + n;
}
在进行计算时,API的调用者永远不会知道计算结果:public void add(double n)