0

こぶしの出力がSystem.out.println()2 番目と同じではないSystem.out.println()
原因は何ですか?

public class swapex{
    public static int var1, var2;

    public void badSwap(int var1, int var2){
        int temp = var1;
        this.var1 = var2;
        this.var2 = temp;
        System.out.println("var1 " + var1 + " var2 "+ var2);
    }

    public static void main(String args[])
    {
        swapex sw= new swapex();
        sw.badSwap(10,20);
        System.out.println("var1 " + var1 + " var2 "+ var2);
    }
}
4

4 に答える 4

8

1つ目はパラメータ値を出力し、2つ目は静的フィールドを出力します。

関連する値のすべての意味を見てみましょう。

public void badSwap(int var1, int var2){

var1およびvar2は、メソッドに渡される引数です。

int temp = var1;

tempはvar1で渡された値に設定されます。

this.var1 = var2;

静的フィールドvar1は、渡されたに設定されvar2ます。不必要に混乱するので、これは貧弱なスタイルです。スタティックを使用する理由がある場合は、を記述してswapex.var1ください。

this.var2 = temp;

ここでも、静的フィールドが設定されています。

System.out.println("var1 " + var1 + " var2 "+ var2);

地元の人々が印刷されています。

メインに戻ると、次の行があります。

System.out.println("var1 " + var1 + " var2 "+ var2);

これらの名前のスタック変数がないため、静的フィールドに解決されます。繰り返しますが、これも貧弱なスタイルです。とを使用swapex.var1swapex.var2ます。

したがって、印刷方法が異なるのは、最初に元のスワップされていない引数を印刷し、次にスワップされた(引数とは逆の)静的フィールドを印刷するためです。

于 2010-04-06T05:30:37.620 に答える
1

badswapで設定している変数はローカル引数であり、swapexの静的メンバーではありません。ローカルスコープが優先されるため、静的メンバーは変更されません

最初に印刷するときはローカル引数を印刷し、2回目は静的メンバーを印刷します

2つを同じにするには、引数の名前をbadswap()に変更します。

于 2010-04-06T05:33:49.313 に答える
0
In the method badswap the var1 and var2 that 

印刷されるのは、前述のメソッドのローカル変数です。

badswap(int var1、int var2

and not that of class variables 

public static int var1、var2

それが違いの原因です。

于 2010-04-06T06:26:58.500 に答える
0

staticフィールドはクラスに関連しています。キーワードは通常、this同じ名前のローカル変数とクラス変数を区別するために使用されます。これは不要なので静的フィールドを参照するためにこれを使用しないことをお勧めしますが、コンパイラはそれを受け入れているようです。

さらに、var1 と var2 は、badSwap() メソッドのスコープ内にのみ存在します。これが、異なる出力を得ている理由です。メソッド内の sysout はパラメーター値を表示していますが、メインの sysout はクラス変数の値を表示しています。

于 2010-04-06T12:08:30.067 に答える