2012-04-07 80 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; }