你传进去的只是一个副本,public class StringTest{
public static int[] change(Integer a,Integer b){
int[] i = new int[1];
Integer c = a;
a = b;
b = c;
i[0]=a;
i[1]=b;
return i ;
}
public static void main(String args[]){
Integer a = 20;
Integer b = 40;
int[] temp = change(a,b);
System.out.println(temp[0]);
System.out.println(temp[1]);
}
}
public static int[] change(Integer a,Integer b){
int[] i = new int[1];
Integer c = a;
a = b;
b = c;
i[0]=a;
i[1]=b;
return i ;
}
public static void main(String args[]){
Integer a = 20;
Integer b = 40;
int[] temp = change(a,b);
System.out.println(temp[0]);
System.out.println(temp[1]);
}
}
当然你要说绝对做不到也不是,利用JNI本地库调用其他语言比如C,可以做到,但为了一个这种功能简直是因小失大得不偿失。
public static void main(String args[]){
Integer a = 20;
Integer b = 40;
// 传递拷贝进去,方法内是将拷贝的值改变了
// 但不影响原来的参数a 和 b
// change(a,b);
Integer c = a;
a = b;
b = c;
System.out.println(a);
System.out.println(b);
}
|-------|
a----->| 20 |<------a'
|-------| |-------|
b----->| 40 |<------b'
|-------|调用change(a,b)时,传递进去的是main函数中a,b的副本a',b'
change(a,b)执行到返回处时,a',b'的指向是变了,但不影响
main函数中的a,b的指向 |-------|
a------>| 20 |<------b'
|-------|
|-------|
b----->| 40 |<------a'
|-------|
change(a,b)执行返回后,a'和b'就不存在了
直接按照4#的方法多省事楼主多了解下java中的变量类型及作用域
你把所有Integer定义的数据都改为int试试
public class test{
static Integer a = 20;
static Integer b = 40;
public static void change(Integer a,Integer b,test t){
Integer c = a;
t.a = b;
t.b = c;
}
public static void main(String args[]){
test t=new test();
change(a,b,t);
System.out.println(a);
System.out.println(b);
}
}楼主?这个是不是你想要的?
主要是这样的,你传进来的其实是复制品,在方法内部进行操作之后就完事了。方法执行后,原来的都没有改变,你没发现,你操作来操作去,都是传进来的参数吗?而原来的却没有动。