Java-在简单示例中返回vs void

Java-在简单示例中返回vs void,java,return-type,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) {

以下两个例子的区别是什么?哪一个是正确的? 在第一个示例中,我使用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));
}

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

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

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

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

第一个示例在循环中创建一个变量(
sum
),并返回它。(方法之外不存在
sum
变量。)第二个示例在
a
类中有一个
sum
变量,并在
void
方法中对其进行修改。(将在特定的
A
对象中修改
sum
变量)您可以执行以下操作:

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

 }

您是否尝试过编译这两种格式?在第二种情况下,您无法打印
void
(即结果不存在)<代码>A=新A();a、 RR(5.5,6.5);系统输出打印项次(总金额)在询问之前,至少应该测试代码。没有对错之分,但如果只是进行计算,则无需将结果保存为实例字段,然后将其打印出来。该方法可以是静态的,并返回结果。
 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);

 }