2017-08-24 6 views
2

私はJavaのリファレンスを試していましたが、興味深い状況がありました。 次のコードは、私に予測できない出力を与えます。関数の配列、文字列、整数を変更しようとしています。JavaのpassByValueまたはReferenceの混乱

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

お知らせ不変ではない一般的なオブジェクトの場合は?これは 'a'を変更しているので、再割り当てしません。 – shmosel

答えて

3

配列はオブジェクトであり、IntegerStringはJavaでは不変です。不変オブジェクトは参照によって変更することはできません。変更を表示するには、再挿入/再割り当てが必要です。したがって違い。

あなたのロジックが適用され、正しいそこ `B =`と `S =`だけどなし `A =`

+0

ありがとう、しかし、あなたは再割り当てをどういう意味ですか?私のために、私はすでに関数の内部で再割り当てします。 –

+0

@Piyush_Chhabraアレイ位置に再割り当てします。拒否しないでください。 –