Differences between System.out.println() and return in Java
I'm trying to understand the difference, and benefits of using System.out.println()
против return blah
в методе.
Это похоже на System.out.println()
is used to display static information, and return
is a value returned from the method. Yet I'm seeing examples like the one below, where a function is used within the System.out.println()
заявление
System.out.println(name.substring(1, 3));
When is it right to use System.out.println()
а также return
, Это оно return
can be used by another piece of code later, whereas System.out.println()
не могу?
4 ответа
Ваше последнее предложение действительно правильно, но различие между этими двумя операциями ОГРОМНО, поэтому я хотел бы дать более подробное объяснение их различий.
Различия:
return
это инструкция, которая контролирует ход выполнения вашей программы. Это фундаментальная часть синтаксиса Java. Он сообщает компьютеру, какую часть вашего кода выполнять, и какие значения использовать во время этого выполнения. Когда вы возвращаете значение, вы говорите: "Результатом вызова этого метода является XXXX" (где "XXXX" - это возвращенное вами значение).
System.out.println
не используется для контроля выполнения вашей программы. Это просто способ информировать пользователя о том, что происходит внутри вашей программы. System.out.println
(для краткости syso) может выводить любую информацию на консоль; не имеет значения, является ли это переменной, выражением или результатом вызова метода. Нет ограничений на "статические" данные.
Давайте посмотрим на них обоих в действии:
int addInts(int arg0, int arg1)
{
return arg0 + arg1;
}
Это означает, что когда мы называем addInts
в нашей программе он оценит сумму своих аргументов. Поэтому, когда мы пишем addInts(3, 7)
это так же, как если бы просто написал 3 + 7
или же 10
в нашем исходном коде. Ничего не выводится на консоль; все, что мы сделали, это дали нашей программе способ расчета чего-либо.
Однако любые вычисления, которые мы могли бы сделать, в конечном итоге бесполезны, если все, что они делают, это размещают их в компьютере, поэтому нам нужен способ показать эту информацию пользователю. Введите сисо:
System.out.println(addInts(22, 16));
addInts
метод вызывается и возвращает 38. Это значение помещается где-то в памяти компьютера, так что наша программа может его найти.
Затем syso принимает это значение (38) и выводит его на консоль, сообщая пользователю, какое значение было вычислено. Ничего нового из этой процедуры не рассчитывается, и наша программа переходит к следующему утверждению.
Так, что я использую?
В простых программах у вас так мало значений для отслеживания, что может быть соблазнительно просто напечатать все, что вы хотите знать, где вы рассчитываете. Например, если вы писали программу для выполнения домашней работы по алгебре (я там был) и вы написали метод для решения квадратного уравнения, может возникнуть соблазн структурировать его следующим образом:
class Algebra
{
static void quadSolve(double a, double b, double c)
{
double result = /* do math... we're ignoring the negative result here*/;
System.out.println("The solution to the quadratic equation is: " + result);
}
public static void main(String[] args)
{
quadSolve(1.0, -6.0, 9.0);
}
}
Однако такой подход быстро становится очень плохой идеей, если вы хотите сделать свою программу немного более сложной. Допустим, одна проблема требует, чтобы вы решили квадратное уравнение, а затем использовали результат этого расчета для расчета объема цилиндра. В приведенном выше примере мы не можем сделать это: после того, как мы сбросим значение result
в консоль через syso, он исчезает, когда quadSolve
метод заканчивается. Было бы гораздо больше смысла, если бы мы имели quadSolve
вернуть result
и пусть "звонилка" (место quadSolve
был вызван из) иметь дело с обработкой этого значения. Это гораздо более гибкий дизайн, который позволяет нам сделать наши программы намного более сложными с относительной легкостью. Эта повышенная гибкость и модульность действительно делают методы полезными. Вот реализация:
class Algebra
{
static double quadSolve(double a, double b, double c)
{
double result = /* do math... we're ignoring the negative result here*/;
return result;
}
public static void main(String[] args)
{
double x = quadSolve(1.0, -6.0, 9.0);
//now we can do whatever we want with result:
//print it, negate it, pass it to another method-- whatever.
System.out.println("The solution to the quadratic equation is: " + x);
System.out.println("And it's square is: " + (x * x));
}
}
Я надеюсь, что это проясняет ситуацию. Не стесняйтесь спрашивать, если вам нужны дополнительные разъяснения.
method
часто возвращает value
(что делается с помощью return
заявление).
Информация может быть "напечатана" в выходной поток System.out.println()
Рекомендации.
У них обоих есть свои применения... которые обычно ортогональны.
Они имеют очень мало общего друг с другом.
System.out.println()
используется для вывода строк на консоль / терминал. Так
System.out.println("Hello world");
должен вывести строку "Hello world"
return
является оператором в Java, чтобы вернуться к коду, который вызвал метод и вернуть значение.
public static int add(int a, int b) {
return a + b; // go back to method that called this method (main)
}
public static void main(String[] args) {
int sum = add(3,4); // the return result (7) is stored in sum
}
Насколько я понимаю, и чтобы дать простой ответ, имеющий важное значение, я бы сказал:
Это похоже на то, когда вы идете в кофейню и заказываете чашку кофе, но бариста говорит вам, хотите ли вы сфотографировать чашку кофе или саму чашку :).
System.out.println() - это изображение, а .. return blah - это чашка кофе.
С помощью «return» вы можете делать со значением return все, что захотите, но с «print» вы видите только то, что делает функция.