【发布时间】:2015-02-05 11:27:13
【问题描述】:
可能重复:Is Java “pass-by-reference” or “pass-by-value”?
我正在尝试以这种方式初始化数组 -
class Main {
public static void main(String[] args) {
int n = 4;
int[] s = null;
int[] f = null;
init(n, s, f);
System.out.println(s.length);
}
public static void init(int n, int[] s, int[] f) {
s = new int[n];
f = new int[n];
}
}
但我得到了NullPointerException 的s.length。因此,将参数明确传递给另一个方法是按值传递。因此对象没有被初始化。
但是当我用不同的方法换取价值时,这是可行的。喜欢 -
class Main {
public static void main(String[] args) {
int n = 4;
int[] s = new int[n];
int[] f = new int[n];
s[0] = 10;
f[0] = 20;
System.out.println(s[0] + " " + f[0]);
swap(s, f);
System.out.println(s[0] + " " + f[0]);
}
public static void swap(int[] s, int[] f) {
int t = s[0];
s[0] = f[0];
f[0] = t;
}
}
另一方面,这不是交换值。
class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 20;
swap(a , b);
System.out.println(a + " " + b);
}
public static void swap(Integer a, Integer b) {
int t = a;
a = b;
b = t;
}
}
因此我需要一些解释是 java “pass-by-reference”还是“pass-by-value”?这个解释可以帮助我理解为什么不能用另一种方法创建对象。
对不起,我的英语不好。提前致谢。
【问题讨论】:
-
一个设置一个值,一个初始化一些东西(通过重新分配)。在通过参考值传递时有很大的不同。
-
基元按值传递(给定副本),对象的指针按值传递。
标签: java object methods reference pass-by-reference