在将数组传递给方法时需要澄清
Need clarification in passing an Array to a method
public class ABC {
public static void main(String args[]) {
int i[] = {1};
change_i(i);
System.out.println(i[0]); //prints 1
}
public static void change_i(int a[]) {
int j[]={3};
a=j;
}
}
public class ABC {
public static void main(String args[]) {
int i[] = {1};
change_i(i);
System.out.println(i[0]); //prints 3
}
public static void change_i(int a[]) {
int j[]={3};
a[0]=j[0];
}
}
这两个赋值 a=j;
和 a[0]=j[0];
实际上有什么区别 为什么输出不同?
1) a=j
使变量 a
引用任何变量 j
引用的内容。意思是,语句执行后,a
和j
引用相同的东西。
2) a[0]=j[0]
使数组 a
的第一个元素(在索引 0 处)的值具有数组 j
的第一个元素的值。意思是,语句执行后,a
和j
的第一个元素引用相同的东西
编辑
就您的问题而言,在方法 change_i
中,每个语句都会发生以下情况:
1)
public static void change_i(int a[]) { // pass the array a by value
int j[]={3}; // create a new array of integers with size 1 that holds the number 3 as its only element
a=j; // make this passed copy value of array a now point to j
}
Java 按值传递所有内容 (Look here for detail),因此在执行方法 change_i
后,没有任何变化。原因是 change_i
方法中的变量 a
用作传递给方法的数组 a
的 引用 。执行语句 a=j
后,此变量 a
现在引用在方法内部创建的数组 j
,但不会影响传入的数组。唯一改变的是 什么a
,在changes_i
,引用
2)
public static void change_i(int a[]) { // pass the array a by value
int j[]={3}; // create a new array of integers with size 1 that holds the number 3 as its only element
a[0]=j[0]; // used the copy value of array a to access the first element of original array a and give it the value of the first element of array j, which is 3
}
这个方法实际上改变了传入的数组。由于这个方法中的变量 a
引用了传入的数组,所以当我们调用 a[0]
时,我们正在使用这个复制的引用访问原始数组的第一个元素,因此 a[0]=j[0]
实际上改变了数组。
您应该阅读有关 how Java passes values into methods 的更多信息。
public class ABC {
public static void main(String args[]) {
int i[] = {1};
change_i(i);
System.out.println(i[0]); //prints 1
}
public static void change_i(int a[]) {
int j[]={3};
a=j;
}
}
public class ABC {
public static void main(String args[]) {
int i[] = {1};
change_i(i);
System.out.println(i[0]); //prints 3
}
public static void change_i(int a[]) {
int j[]={3};
a[0]=j[0];
}
}
这两个赋值 a=j;
和 a[0]=j[0];
实际上有什么区别 为什么输出不同?
1) a=j
使变量 a
引用任何变量 j
引用的内容。意思是,语句执行后,a
和j
引用相同的东西。
2) a[0]=j[0]
使数组 a
的第一个元素(在索引 0 处)的值具有数组 j
的第一个元素的值。意思是,语句执行后,a
和j
的第一个元素引用相同的东西
编辑
就您的问题而言,在方法 change_i
中,每个语句都会发生以下情况:
1)
public static void change_i(int a[]) { // pass the array a by value
int j[]={3}; // create a new array of integers with size 1 that holds the number 3 as its only element
a=j; // make this passed copy value of array a now point to j
}
Java 按值传递所有内容 (Look here for detail),因此在执行方法 change_i
后,没有任何变化。原因是 change_i
方法中的变量 a
用作传递给方法的数组 a
的 引用 。执行语句 a=j
后,此变量 a
现在引用在方法内部创建的数组 j
,但不会影响传入的数组。唯一改变的是 什么a
,在changes_i
,引用
2)
public static void change_i(int a[]) { // pass the array a by value
int j[]={3}; // create a new array of integers with size 1 that holds the number 3 as its only element
a[0]=j[0]; // used the copy value of array a to access the first element of original array a and give it the value of the first element of array j, which is 3
}
这个方法实际上改变了传入的数组。由于这个方法中的变量 a
引用了传入的数组,所以当我们调用 a[0]
时,我们正在使用这个复制的引用访问原始数组的第一个元素,因此 a[0]=j[0]
实际上改变了数组。
您应该阅读有关 how Java passes values into methods 的更多信息。