0
public class Main {

    public static void main(String[] args){

        Class2 class2Object = new Class2();

        //class2Object
        //num1
        class2Object.setNumber(class2Object.number1, 1) ;

        class2Object.getNumber(class2Object.number1);
    }   

}

public class Class2 {
    public int number1;

    public void setNumber(int x, int value){
        x = value;

    }
    public void getNumber(int number){
        System.out.println("Class2, x = "+number);
    }
}

Class2とMainの2つのクラスがあります。Mainクラスでインスタンス変数を1に割り当てます。class2Object.number1が値1に割り当てられないのはなぜですか?出力は0です。

4

3 に答える 3

3

セッターは何もしません:

public void setNumber(int x, int value){
    x = value;   // This just overwrites the value of x!
}

セッターにはパラメーターが1つだけ必要です。受信した値をメンバーフィールドに割り当てる必要があります。

// The field should be private.
private int number;

public void setNumber(int value){
    this.number = value;
}
于 2012-04-07T03:06:46.370 に答える
2

Java では、プリミティブ型 (int など) は、参照ではなく値で渡されます。

そう言って:

Class2 class2Object = new Class2();
class2Object.setNumber(class2Object.number1, 1) ;

参照渡しclass2object.number1ではなく、値渡しです。したがって、パラメーター x insetNumberはまったく新しい int であり、number1inと同じ場所を指していませんclass2object。このメソッドは、新しい int x の値を上書きするだけで、 が指す値を変更しませんnumber1

値を設定するには、次のようにする必要があります。

void setNumber(int newNumber) { this.number1 = newNumber; }
于 2012-04-07T03:57:52.087 に答える
1

このように割り当てる必要があるため:

private int number1;

public void setNumber(int value){
    this.number1 = value;
}
于 2012-04-07T03:08:56.593 に答える