2014-07-09 59 views
0

我不能在下面的函數中添加一個整數,它仍然打印5.任何人都可以解釋這個嗎?不能添加一個變量通過函數傳遞

public class HelloWorld { 
    public static void main(String[] args) { 
     int x = 5; 
     System.out.print('Hello world~~~~~'); 
     for(int i = 0; i < args.length; i++) { 
      System.out.println(args[i]); 
     } 
     System.out.println(Runtime.getRuntime().maxMemory()); 
     System.out.println(Runtime.getRuntime().totalMemory()); 
     System.out.println(Runtime.getRuntime().freeMemory()); 
     OnePlusNumber(x); 
     System.out.println(x);  

     Date date = new Date(); 
     System.out.println(date);  
    } 

    private static Integer OnePlusNumber(int number) { 
     number += 1;   
     return number; 
    } 
} 
+0

你確定這個代碼編譯? –

+1

Java總是按值傳遞,所以在你的方法中你編輯了一個x的cpoy,而不是x本身(更多在這裏:http://stackoverflow.com/questions/40480/is-java-pass-by-reference-或按價值傳遞) – kajacx

回答

3

您不分配您返回的值。更改以下行:

OnePlusNumber(x); 

x = OnePlusNumber(x); 
1

變化

OnePlusNumber(x); 

x=OnePlusNumber(x); 

它將從方法,以x變量再次分配返回的值,如它是一種原始數據類型(INT)。

如果傳遞的參數是類的對象,則不必像這樣分配它。當引用傳遞給方法相同對象的狀態得到改變 -

爲前

Employee emp=new Employee(); 
emp.setName("A"); 

changeEmpName(emp); 


public void changeEmpName(Employee employee){ 
employee.setName("B"); 
} 

然後員工的名字變成B.

這種方法會改變原來的EMP對象,因爲它是參考了通過。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – stealthjong

+0

難道這不是問題的解決方案嗎?我應該刪除答案嗎? –

+0

這個,或者說明你做了什麼以及它爲什麼起作用。 – stealthjong

1

你必須改變YOUT代碼:

OnePlusNumber(x); 

應該

x = OnePlusNumber(x); 

所以,你必須返回值。

而且你的方法schould reurn一個int:

private static int OnePlusNumber(int number){ 
0

功能OnePlusNumber(x);返回一個整數。

x = OnePlusNumber(x);

0

更換它Java使用參考。當你通過xOnePlusNumber。它通過參考x,但在java中,原始類型和字符串是不可變的。 X在這裏是Integer。 所以number+=1將創建新的Integer。但原始功能X,指舊x

這就是爲什麼你需要分配返回值。

x = OnePlusNumber(x); 

http://en.wikipedia.org/wiki/Primitive_wrapper_class

http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

也瞭解

http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

0

這是example.In你的情況不發送Java和C之間的主要區別確切的項目x你只是發送它的一個「複製」到函數,所以函數的結果不會mo dify x的地址只是複製對象x的本地值。

解決這個最常用的方法就是將功能分配到x的結果

x=OnePlusNumber(x);