7

なぜこれが機能するのか誰かが説明できますか?

私はEclipseに2つのクラスを持っています。「Car」というクラスには、次のコードが含まれています。

public class Car {
    public void printOut(String variable1){
        System.out.println("Hello " +variable1);
    }
}

私の「メイン」がある別のクラスは「ハウス」と呼ばれ、その中のコードは

import java.util.Scanner;

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

        System.out.println("Enter name here: ");
        String variable2 = input.nextLine();

        carObject.printOut(variable2);
    }
}

コードを実行すると動作し、「ここに名前を入力してください」と表示され、入力すると「こんにちは「名前が入力されました」」と表示されます。

私の質問は、'variable1' と 'variable2' は、両方とも String クラスであることを除いて、互いに関係がありますか。

コードが正しくコンパイルされる理由について混乱しているためです。

私には、変数 1 は変数 2 と相関関係がないように見えますが、どちらも String クラスであり、互いに相互作用しているようには見えず、変数 1 は「House」クラスで使用されていません。すべてですが、入力したものをコンパイルすることはまだわかっています。'variable1' が 'variable2' に置き換えられ、variable2 に含まれる内容が出力されます。

4

11 に答える 11

3

クラスのメソッド定義は、Carそれを使用するときの一種のプロトタイプです。「ブラックボックス」を使って数学の関数を教えられたことはありますか?数値を入力して出力します。したがって、3と入力すると、関数がf(x)= Xx2の場合、出力は6になります。メソッドを呼び出す前に、var2はvar1とは完全に異なります。ただし、このメソッドでは、var2が渡され、メソッドで使用するすべてのvar1が置き換えられます。心配しないでください、私がJavaを始めたとき、私もこれを取得しませんでした

于 2012-10-21T07:34:34.630 に答える
3

variable2それらは、メソッドに渡されているという理由だけで関連していますCar.printOut。この例えを少し想像してみてください。あなたはコマンドで数学の宿題をする方法を知っています。あなたはと呼ばれるオブジェクトであり、と呼ばれるFacelessVoidメソッドがありますdoHomeworkdoHomeworkタイプの単一のパラメータを取りますWork。現実の世界では、私は仕事の箱を持っていて、あなたの机に仕事の箱を捨てるでしょう。私が箱に何を書いてもあなたには関係ありませんが、箱の中身はあなたの机に捨てられ、そこであなたはそれを好きなように呼ぶことができます。

これはまさにあなたのコードで起こっていることです:あなたはと呼ばれる文字列を持っていて、その内容は内部variable2に「ダンプ」されます。ただし、文字列は実際にはメソッドに組み込まれず、参照がコピーされることに注意してください。つまり、それは同じオブジェクトであり、単に別の何かと呼ばれています。variable1printOutdumped

于 2012-10-21T07:35:36.570 に答える
1

variable2 は、メモリ内のどこかにある文字列への参照です。variable2 の値は、文字列がどこにあるかを調べるために Java によって使用されます。例えば:

variable2                   memory location 1100
[1100]      ------>         "hello"

variable1 は、メモリ内のどこかにある文字列への参照でもあります。関数を呼び出すと、変数 2 の値 (この場合は 1100) が変数 1 に配置されます。

variable1                   memory location 1100
[1100]      ------>         "hello"

文字列の場所が両方に含まれているため、この関数は variable1 を使用して variable2 が参照する文字列を見つけることができます。別の言い方をすれば、どちらも同じ文字列を参照しています。

于 2012-10-21T07:46:53.390 に答える
1

variable2 の参照は、単純に variable2 にコピーされて呼び出されます。variable2 はメソッドの引数として渡されます。それ以外に関係はありません。variable2 は main に対してのみローカルであり、variable1 は printOut に対してのみローカルです。variable1 は、呼び出し元のメソッドからの値を期待する関数パラメーターと考えてください。つまり、任意の文字列を printOut に渡すことができます。

たとえば、carObject.printOut("Toyota") ご覧のとおり、printOut に変数を渡しているのではなく、ハードコードされた文字列を渡しています。

于 2012-10-21T07:32:01.100 に答える
0

variable1は実際には変数ではなく、メソッドに渡される変数の名前です。この名前は、一部の操作のメソッドで使用しているため、必要になります。したがって、variable2現在は実際に変数であるを渡すと、メソッドに。という名前で表示されvariable1ます。お役に立てれば。

于 2012-10-21T07:33:05.970 に答える
0

Javaでは、パラメータは常に値で渡されます。ただし、オブジェクトを渡すと、そのオブジェクトは元のオブジェクト参照を指し、元のオブジェクトを変更できます。

于 2012-10-21T07:33:48.830 に答える
0

関係v1とv2はありません。Housクラスからcar.printOut()メソッドを呼び出すと、v2が値としてスタックにプッシュされます。car.printOut()メソッドは、この値をスタックからv1変数にポップします。したがって、任意の名前を使用できます。

さらに、printOut()でv1の値を変更しても、v2は変更されません。

于 2012-10-21T07:36:49.457 に答える
0

他の人は良い答えを出していますが、語彙を正しく理解するために、variable1「仮パラメーター」と呼ばれますが、 は実際のパラメーターでありvariable2、メソッドに渡される「引数」とも呼ばれますprintOut。引数の受け渡しに関しては、名前で遊んでいるだけであることに気付くのは簡単です。直感的なレベルでは、名前で参照するのではなく、データの場所をいじっているだけです。

于 2012-10-21T07:41:33.387 に答える
0

メソッドの呼び出し中に Variable2 の値が variable1 に移動されます

于 2012-10-21T07:31:12.217 に答える
0

variable2 を printOut() メソッドに渡すのとまったく同じです。variable1 は、メソッドのパラメーターの単なる名前です。

于 2012-10-21T07:32:18.320 に答える
0

呼び出し元または呼び出し先の変数名は無効です。名前付きの変数パラメーターを使用できorange、他のパラメーターhelicopterは同じことを行います。重要なことは、それらが同じタイプでなければならないということです (ここではString)。

両方の変数の名前に関係なく、caller 変数の内容がメソッドに渡されます。

于 2012-10-21T07:33:04.323 に答える