web-dev-qa-db-ja.com

System.out.println()とreturn in Java

メソッドで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()は使用できませんか?

8
ObiWanShanobi

最後の文は事実上正しいですが、これら2つの操作の違いは[〜#〜] huge [〜#〜]なので、それらの違いについてより詳細に説明したいと思います。

違い:

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_を記述した場合と同じです。コンソールには何も出力されません。私たちがやったことは、プログラムに何かを計算する方法を与えることだけです。

ただし、コンピューター内に座っているだけの場合、計算は最終的には役に立たないため、この情報をユーザーに表示する方法が必要です。 sysoを入力してください:

_System.out.println(addInts(22, 16));
_

addIntsメソッドが呼び出され、38が返されます。この値は、プログラムが検出できるように、コンピューターのメモリのどこかに配置されます。

次に、sysoはその値(38)を取得してコンソールに出力し、計算された値をユーザーに通知します。この手順から新しいものは計算されず、プログラムは次のステートメントに進みます。

だから私はどちらを使用しますか?

単純なプログラムでは、追跡する値が非常に少ないため、計算する場所を知りたいすべてのものを印刷したくなることがあります。たとえば、代数の宿題をするプログラムを書いていて(私はそこに行ったことがあります)、2次方程式を解く方法を書いた場合、次のように構成したくなるかもしれません。

_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);
    }
}
_

ただし、プログラムをもう少し複雑にしたい場合、このアプローチはすぐに非常に悪い考えになります。 1つの問題で、2次方程式を解き、その計算結果を使用して円柱の体積を計算する必要があるとします。上記の例では、それを行うことはできません。sysoを介してresultの値をコンソールにダンプした後、quadSolveメソッドが終了すると値は消えます。 quadSolveresultを返し、「呼び出し元」(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()参照によって出力ストリームに「出力」される場合があります。

それらは両方ともそれらの用途を持っています...通常は直交しています。

6
ErstwhileIII

彼らはお互いにほとんど関係がありません。


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
}
1
jh314