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

我有 2 个班级:Class2 和 Main。我在 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!
}

一个 setter 应该只有一个参数。您需要将接收到的值分配给成员字段:

// 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 并且不指向与 in 相同的number1位置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 回答