В чем отличие void от return на примере?

Вот пример кода, который из void выводит значение в main() и присваивает переменно "c" значение. Объясните отличие от return тогда. Только по-простому аля 2 + 2, чтобы такие примеры не сбивали с толку. Спасибо.

pastebin.com/SZkNuMgi
  • Вопрос задан
  • 6552 просмотра
Пригласить эксперта
Ответы на вопрос 6
trerums
@trerums
Мда, вопрос вы конечно написали коряво, что мозг сломать можно. Если я вас правильно понял, то вам не ясно, почему в переменной "с" оказывается значение при том что return вы не использовали. Дело в том, что в данном случае ваша "с" это поле класса, которой вы присваиваете значение в методе getJazz, return тут совсем не нужен, потому что метод ничего не возвращает, он манипулирует полями, которые принадлежат к классу. Если бы вы захотели написать так int b = getJazz() тогда бы пришлось писать return.
Ответ написан
EvgenijDv
@EvgenijDv
C/C++ programmer
Может быть вы начнете с чего-нибудь типа Pascal, разберетесь что такое процедуры и чем он отличаются от функций и уже потом, постепенно начнете разбираться с Java и ООП?
Ответ написан
Комментировать
Суть в том, что 'void' лишь одначает, что данный метод не возвращает никакой переменной, а return - это операция именно возврата значения.
'c' в вашем случае - это свойство объекта, а не возвращаемое значение, а внутри метода вы присваиваете, а не возвращаете, значение именно свойству объекта
Ответ написан
Комментировать
AxisPod
@AxisPod
Вспоминается анекдот:
Летят 2 крокодила, один зеленый, другой направо.
Ответ написан
Комментировать
@Nibilung
ты своим void методом просто записываешь значение переменной "c", а потом просто выводишь её на экран. Если бы метод был бы такого вида:

int getJazz(int a, int b){
     return c = a + b;
}

то можно было бы получить переменную "c" из этого метода, т.е обращаясь System.out.println(nn.getJazz(12,12);
Если бы переменная "c" имела бы модификатор доступа private, то ты не смог бы обратиться к ней так, как в твоем примере.
Попробую пояснить на пальцах. Возьмем твой пример.
public class Main{
        public static void main(String[] args){
                Jazz nn = new Jazz();
                nn.getJazz(12, 12); // вызов void метода, который записывает в "c" число 24
                nn.c = 51;  // я могу здесь присвоить "c" другое значение, например 51
                System.out.println(nn.c); // Выводим переменную "c" которая равна 51, а не 24
        }
}
Ответ написан
@klirichek
Какое значение из void?
Ты же вызываешь просто:
nn.GetJazz(12,12);
и только потом уже, следующим оператором печатаешь поле nn.c
Первая строчка просто вызывает метод (в данном случае - процедуру), который ничего не возвращает (т.е. "возвращает" void)
А второй строчкой ты смотришь содержимое поля c у своего класса.
Это РАЗНЫЕ строки; между собой никак не связанные!

Убери у себя c=a+b и оставь просто a+b - и всё, выведется лишь сумма изнутри метода.

Ровно так же ты можешь написать и
sin(c=a+b)
Это будет означать, что сперва вычислится сумма a+b, её значение будет присвоено c и одновременно возвращено как значение выражения с=a+b.
От значения этого выражения будет взят синус. Но он никуда не будет присвоен; просто займёт проц вычислениями, а результат будет выброшен.
В результате ты так же получишь значение c. Однако значение синуса - нет :).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы