Java中只有传递调用(值传递),没有传址调用(址传递或者引用传递)。所以在Java方法中改变参数的值是不会改变原变量的值的。
Java中只有值传递
1、对于基本类型参数,在方法体内对参数进行重新赋值,不会改变原有变量的值。
2、对于引用类型参数,在方法体内对参数进行重新赋予引用,不会改变原有变量所持有的引用。
3、方法体内对参数进行运算,不会改变原有变量的值。
4、对于引用类型参数,方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值
我们可以想象下,getMiddleOne方法中执行的b=true 和boo = new Boolean(true)都是把新值赋给了他们的拷贝,所以不改变原变量的值;同样,arr[0] = true是把true复制给了arr的拷贝所指向的数组的第一个元素,arr的值和arr的拷贝的值都是该数组的引用,所以arr的拷贝所指向的数组和arr所指向的数组是同一个,所以改变arr的拷贝的数组的元素会同样影响到原变量arr。