Java-简单示例中的return vs void

时间:2018-06-26 19:23:26

标签: java return-type

以下两个示例有什么区别?哪一个是正确的? 在第一个示例中,我使用return打印一些结果,在另一个示例中,我修改变量sum,然后尝试在main方法中打印它。

class A {
   double RR(double a, double b) {    
      double sum = 0;
      sum = (a + b) / 2.0;
      return sum;
   }
}
public static void main(String[] args) {   
    System.out.println(new A().RR(5.5, 6.5));
}

OR

class A {
   double sum = 0;

   void RR(double a, double b) {    
       sum = (a + b) / 2.0;
   }
}
public static void main(String[] args) {

    System.out.println(new A().RR(5.5, 6.5)); 
    //OR System.out.println(sum);

}

2 个答案:

答案 0 :(得分:1)

这里没有“对”或“错”:您可以根据情况使用两种方法:

  • 第一种方法是 stateless ,这是一个巨大的优势,尤其是在涉及并发时。您可以在不同的上下文中从多个线程调用RR,始终获得正确的结果。实际上,您可以使用RR方法static
  • 第二种方法保持状态-它是sum变量。这意味着,如果您调用RR,然后在获取其结果之前再次调用它,则可能会得到错误的数据。另一方面,如果您多次需要,上次操作的结果将为您存储。可能需要也可能不需要。

请注意,第二种方法需要更改:

A a = new A();
a.RR(5.5, 6.5);
System.out.println(a.sum);

在其他条件相同的情况下,应该首选无状态方法(即解决方案1),因为该API更易于使用。

答案 1 :(得分:1)

第一个示例在循环内部创建一个变量(sum)并将其返回。 (sum变量不会在方法之外。)第二个示例在sum类中具有一个A变量,并在void方法中对其进行了修改。 (sum变量将在特定的A对象中进行修改)您可以按照以下步骤进行操作:

 double sum = 0;
 void RR(double a, double b) {

    sum = (a + b) / 2.0;
 }
 public static void main(String[] args) {

    A myObject = new A();
    myObject.RR(5.5, 6.5);
    System.out.println(myObject.sum);

 }