Java中System.out.println()和return之间的差异

Java中System.out.println()和return之间的差异,java,return,return-value,system.out,Java,Return,Return Value,System.out,我试图理解在方法中使用System.out.println()与return blah的区别和好处 似乎System.out.println()用于显示静态信息,return是从方法返回的值。但是我看到了下面的例子,在System.out.println()语句中使用了一个函数 System.out.println(name.substring(1, 3)); 什么时候可以使用System.out.println()和return。是不是return以后可以被另一段代码使用,而System.o

我试图理解在方法中使用
System.out.println()
return blah
的区别和好处

似乎
System.out.println()
用于显示静态信息,
return
是从方法返回的值。但是我看到了下面的例子,在
System.out.println()
语句中使用了一个函数

System.out.println(name.substring(1, 3));

什么时候可以使用
System.out.println()
return
。是不是
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
}

方法
通常返回一个
(通过使用
return
语句完成)

信息可以通过
System.out.println()
references“打印”到输出流


它们都有各自的用途。。。它们通常是正交的。

您的最后一句话实际上是正确的,但这两个操作之间的区别是巨大的,因此我想对它们的区别进行更深入的解释

区别在于:
return
是控制程序执行流程的指令。它是Java语法的基本部分。它告诉计算机要执行代码的哪一部分,以及在执行过程中要使用哪些值。当您返回一个值时,您说的是“调用此方法的结果是XXXX”(其中“XXXX”是您返回的值)

System.out.println
不用于控制程序的执行方式。这只是告知用户程序内部正在发生的事情的一种方式
System.out.println
(缩写为syso)可以将任何信息打印到控制台;不管它是变量、表达式还是方法调用的结果。对“静态”数据没有限制

让我们来看看这两种方法的实际效果:

int addInts(int arg0, int arg1)
{
    return arg0 + arg1;
}
这意味着在我们的程序中调用
加法器
,它将计算为其参数之和。因此,当我们编写
附加项(3,7)
时,就好像我们在源代码中简单地编写了
3+7
10
。控制台上没有打印任何内容;我们所做的只是给我们的程序一种计算方法

然而,如果我们所做的只是坐在计算机内部,那么我们可能进行的任何计算最终都是无用的,因此我们需要一种向用户显示这些信息的方法。输入syso:

System.out.println(addInts(22, 16));
调用
addents
方法并返回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);
    }
}
然而,如果您想让程序变得更复杂一点,这种方法很快就会变成一个非常糟糕的主意。假设有一个问题需要你解二次方程,然后用计算结果来计算圆柱体的体积。在上面的示例中,我们不能这样做:在通过syso将
result
的值转储到控制台之后,当
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));
    }
}

我希望这能把事情弄清楚。请随意询问您是否需要进一步澄清。

您正在将土豆与太阳光束进行比较,您正在巨石阵周围飞行紫色独角兽,等待流星带回恐龙。如果可行,我将返回blah。这意味着你可以用这个值做你想做的事情。printlin()是固定的,您可能并不总是想打印。我不鼓励用户对这个问题投否决票。这可能看起来很愚蠢,但我以前教过java初学者,就这一知识水平而言,这实际上是一个提出得很好的问题。@ValekHalfHeart虽然我没有否决它,并且同意你的观点,但否决的工具提示说“这个问题没有显示任何研究成果,它不清楚或没有用处。”。我觉得这有点像“没有显示任何研究成果”,因为谷歌搜索“java syso”和“java return”会很快回答这个问题。@ValekHalfHeart我读了它(顺便说一句,这是一个非常好的答案,我的+1)。但你是对的,随着时间的推移,事情似乎越来越琐碎,我们应该尊重这一点。但你忽略了vs解释=\“对程序的执行方式没有任何影响,除非发生错误”,那么,可以在其中放入方法调用和赋值,这可能会改变程序的执行方式;)不管怎么说,这是一个令人惊讶的答案,+1感谢您的透彻解释,明确地澄清了问题,并解释了为什么允许返回