Sor*_*rOK 12 java pass-by-value
我知道Java总是按值传递,但我不明白为什么这样可行:
public static void swap(int[] arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args)
{
int[] arr = {3, 4, 5, 6};
swap(arr, 1, 3);
// arr becomes {3, 6, 5, 4}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用:
public static void swap(int[] arr, int[] arr2)
{
int[] tmp = arr;
arr = arr2;
arr2 = tmp;
}
public static void main(String[] args)
{
int[] arr = {3, 4, 5, 6};
int[] arr2 = {1, 2, 5, 6};
swap(arr, arr2);
}
Run Code Online (Sandbox Code Playgroud)
为什么?
您的第一个示例是传输数组中的值.
第二个是你试图交换引用(数组是Java中的对象).引用是本地副本(按值传递),并且对calee上下文没有影响.
(问题#56.903关于按值调用; Stackexchange应该打开PassByValue.com ;-)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |