急!!!有一个关于数组传参的程序,请帮助分析结果。。。谢谢! public static void change(int x[])相当与 int []temp = x; ... temp = y; 你只能修改temp[i], 修改temp与你的x没有关系。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 说不清为什么 :(System.arraycopy(y, 0, x, 0, y.length); java语言总是传值调用。方法不能修改传递给它的任何参数变量的内容!对于public static void change(int x[]){ int y[]={21,22,23,24,25}; x=y;}x在方法被调用结束后,x的值还是没有改变。 数组,对象,和接口都属于引用类型把数组作为参数传递,传过去的只是它的一个引用,把这个引用指向新的数组,对原数组没有改变public static void change(int x[]){ int y[]={21,22,23,24,25}; x=y; //如果x不是一个数组,而是一个对象的话,通过对传过来的引用(实际上是复制了一个引用)进行操作,会改变原来的对象,但是,你现在是把这个引用指向了新的对象,原对象不会改变。} 这个跟class A {int x;public void swappingTheObjectsAlwaysFailsOutsideTheMethod(A a1, A a2) { A temp = a1; a1 = a2; a2 = temp;}public void swappingTheObjectsFieldsWorks(A a1, A a2) { int temp = a1.x; a1.x = a2.x; a2.x = temp;}public static void main(String[] args) { A swap1 = new A(); swap1.x = 1; A swap2 = new A(); swap2.x = 2; swappingTheObjectsAlwaysFailsOutsideTheMethod(swap1, swap2); System.out.println(swap1.x); swappingTheObjectsFieldsWorks(swap1, swap2); System.out.println(swap1.x);}}一个道理,数组(不管是不是int[])也是对象,每个数组元素相当于这个对象的一个字段 反正记住这么一句话:传A改x才有用而传A改A在方法里面有效,除了方法就没用 这是JAVA语言非常特殊的问题之一;应该每一本JAVA的入门书都有分析的! 你的问题用C++来表示就是:int *x={11,12,13,14,15};void chang(int *x){ x=y;}如果你要改变x指向的数组的值,就要改变*x, 而不是x, 如下:int *x={11,12,13,14,15};void chang(int *x){ *x=?; *(x+1)=?; ...} 这样应该可以了:class ArrayArgument{public static void main(String args[]){ int x[]={11,12,13,14,15}; display(x); change(x); display(x); } public static void change(int x[]){ int y[]={21,22,23,24,25}; for(int m=0;m<5;m++) { x[m]=y[m]; } } public static void display(int x[]){ for(int i=0;i<x.length;i++) System.out.print(x[i]); System.out.println(""); }} Access数据库中sql语句问题! 比较使用缓存区与不使用的效率 HashMap如何在IO中传送 答案是E,为什么? 高手请教! 请教高手,J2SE包引入的问题训。 出学JAVA,问个小问题。关于类的。 难道是参数传递问题? Vector问题 关于对话框的简单问题,20分!! 在java程序运行时,如何隐藏命令提示符窗口 请问高手这样的Swing违例如何解决?
对于public static void change(int x[]){
int y[]={21,22,23,24,25};
x=y;}
x在方法被调用结束后,x的值还是没有改变。
把数组作为参数传递,传过去的只是它的一个引用,把这个引用指向新的数组,对原数组没有改变public static void change(int x[]){
int y[]={21,22,23,24,25};
x=y; //如果x不是一个数组,而是一个对象的话,通过对传过来的引用(实际上是复制了一个引用)进行操作,会改变原来的对象,但是,你现在是把这个引用指向了新的对象,原对象不会改变。
}
class A {
int x;
public void swappingTheObjectsAlwaysFailsOutsideTheMethod(A a1, A a2) {
A temp = a1;
a1 = a2;
a2 = temp;
}public void swappingTheObjectsFieldsWorks(A a1, A a2) {
int temp = a1.x;
a1.x = a2.x;
a2.x = temp;
}public static void main(String[] args) {
A swap1 = new A(); swap1.x = 1;
A swap2 = new A(); swap2.x = 2;
swappingTheObjectsAlwaysFailsOutsideTheMethod(swap1, swap2);
System.out.println(swap1.x);
swappingTheObjectsFieldsWorks(swap1, swap2);
System.out.println(swap1.x);
}
}一个道理,数组(不管是不是int[])也是对象,每个数组元素相当于这个对象的一个字段
应该每一本JAVA的入门书都有分析的!
int *x={11,12,13,14,15};
void chang(int *x){
x=y;
}如果你要改变x指向的数组的值,就要改变*x, 而不是x, 如下:
int *x={11,12,13,14,15};
void chang(int *x){
*x=?;
*(x+1)=?;
...
}
class ArrayArgument{public static void main(String args[]){
int x[]={11,12,13,14,15};
display(x);
change(x);
display(x);
}
public static void change(int x[]){
int y[]={21,22,23,24,25};
for(int m=0;m<5;m++)
{
x[m]=y[m];
}
}
public static void display(int x[]){
for(int i=0;i<x.length;i++)
System.out.print(x[i]);
System.out.println("");
}
}