Java - вернуть void в простом примере - PullRequest
0 голосов
/ 26 июня 2018

В чем разница между следующими двумя примерами? Какой из них правильный? В первом примере я использую 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 голосов
/ 26 июня 2018

Первый пример создает переменную (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);

 }
0 голосов
/ 26 июня 2018

Здесь нет «правильного» или «неправильного»: вы можете использовать оба подхода в зависимости от ситуации:

  • Первый подход - без сохранения состояния , что является огромным плюсом, особенно когда задействован параллелизм. Вы можете вызвать RR из нескольких потоков в разных контекстах, всегда получая правильный результат. На самом деле, вы можете сделать RR метод static.
  • Второй подход сохраняет состояние - это переменная sum. Это означает, что если вы наберете RR, а затем вызовете его еще раз, прежде чем получить результат, вы рискуете получить неверные данные. С другой стороны, результат последней операции сохраняется для вас на случай, если он понадобится вам несколько раз. Это может или не может потребоваться.

Обратите внимание, что второй подход требует изменения:

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

При прочих равных условиях следует предпочесть подходы без сохранения состояния (т. Е. Решение 1), поскольку API проще в использовании.

...