2012-04-07 79 views
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?输出为0java变量和参数

回答

3

您的二传手没有做任何事情:

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

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

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

public void setNumber(int value){ 
    this.number = value; 
} 
+0

如果我有很多像数字1,数字的整数...我需要为每一个变量二传手? – user1050548 2012-04-07 03:08:48

+1

在这种情况下,我想你需要List数组。 – sarwar026 2012-04-07 03:09:58

+0

大多数人对每个变量都有单独的getter和setter。它使得该方法设置的变量更加清晰。 – user12345613 2012-04-07 04:00:03

1

既然你应该分配是这样的:

private int number1; 

public void setNumber(int value){ 
    this.number1 = value; 
} 
+2

您忘记删除不必要的参数。 – twain249 2012-04-07 03:09:18

+0

ohh对不起,是@ twain249。你是对的。我正在更新我的代码。 – sarwar026 2012-04-07 03:13:02

2

在Java中,原始类型(如int)是按值引用传递,而不是。

说着:

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

经过class2object.number1的价值,而不是通过引用。因此setNumber中的参数x是一个全新的int,并且不指向与number1class2object中相同的位置。该方法只是覆盖新的int x的值,并不修改number1指向的值。

为了设置应该是值:

void setNumber(int newNumber) { this.number1 = newNumber; }