cow*_*331 6 java integer pass-by-reference pass-by-value
public static void main(String[] args) {
Integer i = new Integer(0);
int[] arr = {1};
p1(i);
p2(arr);
System.out.println(i);
System.out.println(arr[0]);
}
public static void p1(Integer i) {
i = 2;
}
public static void p2(int[] i) {
i[0] = 2;
}
Run Code Online (Sandbox Code Playgroud)
//输出:0,2
我怎样才能更改i的值,就像我更改arr的值一样?
Jon*_*eet 15
你不能改变的变量值i中main从内p1方法,因为该参数按值传递:参数i在p1从完全独立的i变量,这只是他们在方法开始时相同的值.Java的始终使用传递值语义-但是当参数类型是一个类,它是一个基准是按值传递.
事实上,你不改变的价值arr,无论是-它像以前一样是相同的数组的引用,但该值在数组已经改变.这就是你不能做的事情Integer,因为它Integer是一种不可变的类型.
如果你想要一个类似的可变类Integer,你可以使用AtomicInteger:
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger(0);
modify(i);
System.out.println(i);
}
private static void modify(AtomicInteger x) {
x.set(2);
}
Run Code Online (Sandbox Code Playgroud)
但是我通常不会这样做 - 我通常会尝试不修改方法参数所引用的对象.相反,我编写计算单个结果的方法,然后返回.
您可以使用AtomicInteger,它允许更改,而不是Integer:
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger(0);
p1(i);
System.out.println(i);
}
public static void p1(AtomicInteger i) {
i.set(2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17223 次 |
| 最近记录: |