2017-08-24 93 views
2

我試圖與Java參考玩,我得到了一個有趣的情況。 這下面這段代碼提供了不可預知的輸出到我。我想修改數組,字符串和函數中的整數。的Java passByValue或參考混亂

public static void main(String[] args){ 
    int[] arr = {1,2,3,4,5}; 
    Integer b = 6;  
    String s = "ABC"; 

    fun(arr, b,s); 
    for(int i : arr) 
     System.out.print(i + " "); 
    System.out.println(); 
    System.out.println("b="+b); 
    System.out.println("s="+s); 
} 

public static void fun(int[] a, Integer b, String s){ 
    b = b*10;  
    for(int i =0; i<a.length; i++) 
    { 
     a[i] = a[i]+10; 
    }  
    s=s+"PIY"; 
} 

現在,這給了以下的輸出:

11 12 13 14 15 
b=6 
s=ABC 

我不明白爲什麼陣列得到改變,但字符串和整數沒有得到裏面的功能改變。

+2

注意有一個'B ='和'S ='但沒有一個'='一般對象的情況下,是否正確?這是因爲你正在修改'a',而不是重新分配它。 – shmosel

回答

3

數組是一個對象和IntegerString和在Java中是不可變的。您不能通過引用更改不可變對象。您必須重新插入/重新分配以查看更改。因此有所不同。

你的邏輯適用並沒有一成不變的

+0

感謝,但你是什麼意思重新分配。對我而言,我已經在函數內部重新分配。 –

+0

@Piyush_Chhabra重新分配到該陣列的位置。不反對。 –