В чем разница между void и return, хотя я могу получить одинаковый результат на обоих?

я сделал небольшую программу для суммирования двух чисел, если бы я использовал метод типа void, это было бы так

import java.util.Scanner;

public class NewClass {

    public static void main(String[] args) {
        Scanner input = new Scanner (System.in);
        System.out.println("enter x");
        int x = input.nextInt();
        System.out.println("enter y");
       int y = input.nextInt();
       getSum(x,y);
    }

    public static void getSum(int x, int y)
    {
        int sum = x + y;
        System.out.println("sum = " + sum);
    } }

здесь, если я использовал метод, который возвращает значение, я получу тот же результат!

    import java.util.Scanner;

public class NewClass {

 public static void main(String[] args)
 {
        Scanner input = new Scanner (System.in);

        System.out.println("enter x");
        int x = input.nextInt();
        System.out.println("enter y");
       int y = input.nextInt();
       int r = getSum(x,y);
        System.out.println("sum = " + r);
    }
    public static int getSum(int x, int y)
    {
        int sum = x + y;
        return sum;
    }}

поэтому я запутался, в чем преимущество возврата значения, если я могу закончить свою программу с помощью метода типа void?


person Noob programmer    schedule 14.04.2018    source источник
comment
в вашем случае: никакой пользы.   -  person luk2302    schedule 14.04.2018
comment
Что ж, в первой программе метод getSum(...) печатает оператор, а во второй он возвращает только сумму, а вывод ее на экран выполняется в методе main. Дополнительную информацию о типах возврата можно найти в этом руководстве от Oracle.   -  person Turing85    schedule 14.04.2018
comment
Что делать, если вам нужно что-то сделать со значением суммы после ее расчета? Если вы попытаетесь использовать значение суммы для выполнения каких-либо других вычислений в getSum, это нарушит контракт метода, поскольку этот метод должен ТОЛЬКО получить сумму. В этом случае вам нужно будет вернуть значение, чтобы его можно было использовать в другом месте в другом расчете. В вашем конкретном случае вам действительно не нужно возвращать значение, поскольку вы просто печатаете сумму. Однако это неправильный дизайн, поскольку метод называется getSum, поэтому он должен позволять вызывающей стороне получать значение суммы (путем ее возврата).   -  person Jake Miller    schedule 14.04.2018
comment
Какой смысл в getSum, когда у нас есть +? Выбор дизайна. В вашем случае удаление println из getSum повысит удобство использования getSum. Если этот метод печатает, то вы должны использовать его только в тех областях, где требуется немедленная печать суммы. Если вы удалили println, вы (или кто-либо, кому вы разрешите использовать этот метод) можете повторно использовать getSum для других целей, которые могут не требовать немедленного вывода суммы.   -  person Dioxin    schedule 14.04.2018


Ответы (6)


Дело не в том, чтобы получить результат, а в том, как мы его получим
рассмотрим

public static void getSum(int x, int y)
    {
        int sum = x + y;
        System.out.println("sum = " + sum);
    }

выведет вывод на экран после вычисления,
но когда мы используем return, как вы сделали это позже

public static int getSum(int x, int y)
    {
        int sum = x + y;
        return sum;
    }

эта функция вернет сумму. эта сумма может быть сохранена в переменной, которую можно использовать впоследствии, как в рекурсии

person yasir jafar    schedule 14.04.2018

В маленьких программах разницы не будет, но при написании больших программ приходится делать несколько функций, которые вызываются несколько раз и может понадобиться вывод одной функции в другую. В этом случае вам потребуется возврат, чтобы выходные данные одной функции можно было использовать в другой.

Надеюсь это поможет!!

person Priyanka Jain    schedule 14.04.2018

Я думаю, что ответ таков: если вы вызываете метод getSum() с возвращаемым типом в любом другом классе... вы получите возвращаемое значение, которое можно использовать для дальнейшей обработки. . Где, как в пустоте, это невозможно... Надеюсь, это поможет... Ответьте, если есть сомнения..

person Robin Jesba    schedule 14.04.2018

Я могу понять, почему у вас есть этот вопрос.

Прежде всего, вы должны знать, что в реальной разработке мы не используем консольные логи.

System.out.Println();

Это используется только для отладки и то в очень редких случаях.

Весь смысл функции состоит в том, чтобы получить некоторые входные данные и преобразовать их во что-то другое.

So,

public static int getSum(int x, int y) {
 return x+y;
}

public static void main(String[] args) {
 System.out.Println(getSum(5,10));
}

Это лучшее решение.

С уважением,

Ракеш

person Rakesh Narang    schedule 14.04.2018

Когда вы используете ключевое слово void, это означает, что метод вообще ничего не возвращает. Если вместо этого вы объявляете возвращаемый тип, отличный от void, в операторе метода, этот метод должен обязательно возвращать допустимое значение для объявленного возвращаемого типа, используя ключевое слово return, за которым следует переменная/значение для отправки обратно классу, вызвавшему метод.

Определение методов здесь у вас есть документация по Java для объявления метода

Отвечая на ваш вопрос, в небольших программах, которые работают с примитивными значениями, это не имеет большого значения, но в сложной программе, когда вам обычно нужно возвращать определенные типы объектов, то есть ArrayList или фактически экземпляр класса, который вы создали, вы не можете просто поставить его в System.out.println и отправить на консоль, в основном вы захотите получить что-то из метода, и это что-то обычно может быть более сложным объектом, чем целое число или строка, способ получить это что-то через тип return определяется оператором метода.

Обычно возвращаемые типы используются, когда ваш метод является статическим и не может взаимодействовать с нестатическими переменными экземпляра класса. Статические методы этого типа обычно получают значения из своих аргументов, выполняют определенный прогресс и затем возвращаются. результат, который может использовать вызывающий метод.

person Daniel    schedule 14.04.2018

Возврат значения позволяет использовать это значение любым удобным для вас способом, в том числе распечатать его или присвоить переменной для дальнейшей обработки. Если, с другой стороны, вы печатаете значение в методе и ничего не возвращаете, т.е. создаете метод типа void, то это все, что вы можете сделать с этим методом.

person Shant Dashjian    schedule 14.04.2018