0

我对 void 和 return 有一些“困惑”。一般来说,我理解 void 用在方法中而不返回任何东西,而当我想向调用代码返回一些东西时,return 用在方法中。

但在下面的代码中,我可以同时使用两者,我的问题是,使用哪一个?以及如何确定?是关于性能吗?

通常,我在两种情况下都有相同的结果。

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;
    }
}

谢谢!

4

7 回答 7

4

这种方法:

public void add(double n)
{
   number += n;
} 

您更改了 的内部状态,number但此方法的调用者不知道number.

在下面的方法中,您正在向调用者暗示number.

public double add1(double n)
{
   return number = number +  n;
}

我建议保留一个单独的getNumber()getter 方法。

于 2013-07-08T13:13:50.703 回答
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);

这很多时候非常方便,阅读效果很好,并且节省了垂直屏幕空间。

这个成语称为fluent API

于 2013-07-08T13:21:00.353 回答
1

在 void 方法中:

public void add(double n)
{
    number += n;
} 

您不能n跨方法使用变量。这意味着您将无法将其用于该Calc方法。

但是,当使用实际返回某些内容的方法时,例如:

public double add1(double n)
{
    return number = number +  n;
}

您可以将该变量用作对象,从而允许您在Calc方法和其他方法中根据需要多次使用它,每次可能是同一个对象(如果使用不同的值进行计算,则不建议使用)或每个新对象时间。

据我所知,没有明显的性能问题。

于 2013-07-08T14:02:26.790 回答
0

我个人更喜欢返回一个值。它允许您以很少甚至没有成本的方式向调用代码提供信息(两种方式的性能通常大致相同)。它可以是计算的结果,也可以是 Mark 提到的允许您将语句链接在一起的对象。哪一个可能取决于您的特定应用程序。

于 2013-09-13T18:55:46.480 回答
0

return不应与 void 类类型一起使用,因为默认情况下会返回程序输出,并且可以通过 java 类的适当方法显示,例如当您要显示程序的输出时:

System.out.println("number = " + number);

于 2014-12-06T12:34:52.263 回答
0

你有这样的函数定义:-public(或私有等)-lvl 访问。-static(或空白)访问该方法而不创建该对象的实例。-and void:您已经注意到任何返回某物的函数都包含在定义中的“某物”数据类型(例如:返回 int 值或字符串)。现在,当您的函数没有返回时,将 VOID 视为数据类型(int、string 等)的占位符

于 2018-03-11T05:46:38.177 回答
-1

这样想:如果您从代码中删除以下内容,您认为您的类是否有用:

public double add1(double n)
    {
        return number = number +  n;
    }

当您进行计算时,API 的调用者永远不会知道计算的结果:public void add(double n)

于 2013-07-08T13:15:02.253 回答