黑马程序员技术交流社区

标题: 参数置换的问题 [打印本页]

作者: 胥文    时间: 2013-2-20 16:44
标题: 参数置换的问题
public static void main(String[] args) {
  // TODO Auto-generated method stub
  int x=1,y=2;
  swap(x,y);//x和y置换
  System.out.println(x+"---"+y);//但是输出结果还是原来的
}
public static void swap(int x,int y)
{
  int temp;
  temp =x;
  x=y;
  y=temp;
  System.out.println(x+"---"+y);
  
}
作者: 柴乔军    时间: 2013-2-20 16:53
你没有搞清楚变量的作用域问题,你的方法也没有返回值,局部变量在栈内存中,不同的方法有不同的变量存储空间,
而你两个方法中打印的是各自内存中对应的变量值,当然没有任何改变
作者: 张晋瑜    时间: 2013-2-20 16:56
是不会变的
因为main中的x,y和swap中的x,y完全是不同的变量(传的只是值)
假如是引用型参数变量的话就不一样了,因为传递引用型参数传的是地址
作者: 曹春贵    时间: 2013-2-20 16:57
主函数里只是调用了方法swap,并将x,y这俩个参数传递过去,函数执行时将俩个数赋值给自己方法体内的局部变量,然后进行互换,并没有对主函数的x,y这俩个局部变量操作,所以函数执行完还是原本的。你这是局部变量和全局变量的问题,需要在类里添加属性x,y,即全局变量了,然后所有函数方法都使用它们,如果互换了自然会达到你想的那个效果
作者: 黑马刘杰    时间: 2013-2-20 16:58
  1. public static void main(String[] args) {
  2.   // TODO Auto-generated method stub
  3.   int x=1,y=2;
  4.   swap(x,y);//1和2被传入swap方法的两个变量a,b中
  5.   System.out.println(x+"---"+y);//但是输出结果还是原来的
  6. }
  7. //int a,int b这就在栈中新创建了两个int变量
  8. public static void swap(int a,int b)
  9. {
  10. //在这里,将a和b的值进行了交换,但是,当swap方法结束时,a和b就会被释放,变量x,y的值并没有改变
  11.   int temp;
  12.   temp =a;
  13.   a=b;
  14.   b=temp;
  15.   
  16. }
复制代码

作者: 偏執旳、靑春    时间: 2013-2-20 17:02
类中变量称为成员变量,作用于整个类中,而方法中变量叫做局部变量,随着方法结束释放
成员变量在对内存中
局部变量在栈类存中
如果你想改变成员变量的值,可以定义一下返回值,赋值给X,y
作者: wahaha    时间: 2013-2-20 17:19
楼上的朋友们说的很详细
我再打个比方说明哈。主函数“public static void main(String[] args)”中的X贴个标签1,y贴个标签2;
这里的x和y与“public static void swap(int x,int y)”中的x和y完全木有关系,(int x,int y)中的x和y没有实质意义,你可以理解成(int a,int b);
你调用这个函数,只是局部进行进行赋值 a=1,b=2;然后对换成  a=2,b=1,
然后第一次在调用函数里打印a和b的值就是2---1,在主函数里又有一次打印任然是打印的 主函数里的x和y的值,即 1---2.

PS:如果你学过C,了解点指针就灰常好理解鸟。呵呵
作者: 罗海云    时间: 2013-2-20 17:55
朋友, 你那XY 定义的是局部变量,. 作用域只在一个大括号中. 下面函数置换了. 并不代表上面置换了..
作者: 江华    时间: 2013-2-20 18:15
兄弟,你的那个代码就好比,你给两个兄弟拍照了照片,说不好看,让两个兄弟去换衣,换完衣服,再指着他们原来的照片说,你们怎么没换衣服?
作者: 江华    时间: 2013-2-20 18:28
//用大白话解释你的代码
public static void main(String[] args) {
  // TODO Auto-generated method stub
//给X,Y拍照,保存信息
  int x=1,y=2;
//这个时候,你说让它们相互换下衣服。
//你找来了专门做互换这个事情的swap,它做完事情,走了(这里你有没有改变X,Y的值)
  swap(x,y);//x和y置换
//你要把它们的照片打印出现来,这个时候,你说,你打印出来的应该是那个照片?
//互换前还是互换后?
  System.out.println(x+"---"+y);
}
public static void swap(int a,int b)
{
//这个是一个专门处理互换事情的类
//你定义了一个中间变量,用来存放,其中一方的衣服
  int temp;
把a兄弟的衣服给了temp,拍照保存
//
  temp =a;
//把b兄弟的给a,拍照保存
  a=b;
//把temp保存的X的衣服再给b,拍照保存,这样就完成了互换
  b=temp;
//这里打印,因为有拍照保存的动作,所以,这里打印以后和原来的数据是不一样的
System.out.println(a+"---"+b);
//程序该退出了,java是个节约的好孩子,他们要把自己占用的资源给释放了
//temp、a、b这写局部变量的值,会发生什么变化?
//是不是随着swap的消亡而消亡?
}
作者: 江华    时间: 2013-2-20 18:28
//用大白话解释你的代码
public static void main(String[] args) {
  // TODO Auto-generated method stub
//给X,Y拍照,保存信息
  int x=1,y=2;
//这个时候,你说让它们相互换下衣服。
//你找来了专门做互换这个事情的swap,它做完事情,走了(这里你有没有改变X,Y的值)
  swap(x,y);//x和y置换
//你要把它们的照片打印出现来,这个时候,你说,你打印出来的应该是那个照片?
//互换前还是互换后?
  System.out.println(x+"---"+y);
}
public static void swap(int a,int b)
{
//这个是一个专门处理互换事情的类
//你定义了一个中间变量,用来存放,其中一方的衣服
  int temp;
把a兄弟的衣服给了temp,拍照保存
//
  temp =a;
//把b兄弟的给a,拍照保存
  a=b;
//把temp保存的X的衣服再给b,拍照保存,这样就完成了互换
  b=temp;
//这里打印,因为有拍照保存的动作,所以,这里打印以后和原来的数据是不一样的
System.out.println(a+"---"+b);
//程序该退出了,java是个节约的好孩子,他们要把自己占用的资源给释放了
//temp、a、b这写局部变量的值,会发生什么变化?
//是不是随着swap的消亡而消亡?
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2