标题: 感觉是个很小的错误,但是不知道在哪。。。 [打印本页] 作者: 王少岩 时间: 2012-8-13 10:25 标题: 感觉是个很小的错误,但是不知道在哪。。。 public static void main(String[] args)
{
int m = 2;
int n = 3;
int x = 2;
int y = 3;
if(m<n)
{
int temp = m;
m = n;
n = temp;
}
System.out.println("m::"+m+"...n::"+n);//为什么在这里实现了m、n的交换位置
mySwap(x,y);
System.out.println("x::"+x+"...y::"+y);//为什么在这里不能实现x、y的交换位置
}
public static void mySwap(int m,int n)
{
if(m<n)
{
int temp = m;
m = n;
n = temp;
}
}
我真的很诧异!!!!!! 作者: 郑正华 时间: 2012-8-13 10:42 本帖最后由 郑正华 于 2012-8-13 10:44 编辑
我记得就是数组排序那块吧,具体哪个我说不准,我现在上班。。视频都在家不方便看啊。。。作者: 耿加荣 时间: 2012-8-13 11:56
这个就是“引用传递”和“值传递”的区别了,int型参数为值传递,不会改变原来实际参数的值。。。,这个你得去看看值类型和引用类型的区别了。。。:P作者: 黄敏 时间: 2012-8-13 12:45
public static void main(String[] args)
{
int m = 2;
int n = 3;
int x = 2;
int y = 3;
if(m<n)
{
int temp = m;
m = n;
n = temp;
}
System.out.println("m::"+m+"...n::"+n);//通过第三方变量temp,交换了m和你的值了,这时候的确是m=3,n=2.
mySwap(x,y);//程序执行到这的时候,把x=2,y=3这两个成员变量给了mySwap方法并作为局部变量在mySwap方法中使用,方法里的确改变了他们的位置,也就是调用这个方法只是改变了它内部变量的位置,方法外面管不用了,就是楼上说的。
System.out.println("x::"+x+"...y::"+y);//为什么在这里不能实现x、y的交换位置 //这个输出语句还是用的main方法中的变量,看到的还是x=2,y=3 ,跟你调用mySwap方法,没关系的,你要是把这句话放在mySwap方法中才会看到调换位置了
}
public static void mySwap(int m,int n)//这只是引用了x,y的值给了m和n,里面改变的是m,n的值,并不是x和y,这就好比,我(main)有一份考试题答案,你(mySwap)拷贝了我(main)一份自己用,至于你(mySwap)随便怎么改,我管不了,我看到的只是你改变了你拷贝我的那份答案,我的这份还是完好不变的,我看到的还是我自己的,你的就是形参,我的就是实参
不知道你明白了吗。希望对你有帮助
{
if(m<n)
{
int temp = m;
m = n;
n = temp;
}
}作者: 王少岩 时间: 2012-8-13 13:34
黄敏 发表于 2012-8-13 12:45
public static void main(String[] args)
{
int m = 2;