static void swap(int x, int y) {
x = y;
y = x;
return;
}
虽然没有出错,但是为什么不行
static void swap(int x, int y) {
int z =x;
x=y;
y=z;
return;
}
int 是基本类型 属于值传递 传参数过去 变量是改不了的 其次交换数据如下:
int c =x;
x=y;
y=c;
你可以将函数的参数弄成Integer x, Integer y,Java有自动的装箱和拆箱机制,内如交换补一个变量。
static void swap(int x, int y) {
int z =x;
x=y;
y=z;
return;
}
封装成对象后交换,基本数据类型直接在栈内
需要第三个变量进行值传递
你传值到函数里面,那么传进去的这两个参数的变化只作用于函数里面,
外面是无变化的,想要改变变量的值,必须重新赋值。比如你的例子:
static void swap(int x, int y) {
x = y;
y = x;
return;
}
假设你开始定义的变量是m和n,你执行函数swap(m,n)之后,是函数swap定义了x=m和y=n,
至于函数里面x,y的变化已经和m,n没有关系了,改变的只是x和y。如果你要改变m,n的值,必须重新赋值到原来的m,n。
int m = 10;
int n = 20;
int c = m;
m=n;
n=c;
static void swap(int x, int y) {
x=y; //y的值赋给x,则x=y
y=x; //这一步x的值赋给y,由于上一步x=y,则这一步是没有意义的,结果都是x=y而且都等于最开始y的值。
return;
}
因此,两个数交换值不可以直接交换,而是借用中间变量,假设x=1,y=2将x的值赋给z,z=1,y的值给x,x=2,z的值在赋给y,y=1,则最后x=2,y=1.
你可以类比下,现在有两杯水,你要交换下这两个杯子里面的水,怎么才能办到?是不是应该有第三个杯子。