2017-08-24 90 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重新分配到该阵列的位置。不反对。 –