A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胥文 中级黑马   /  2013-2-20 16:44  /  2098 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
  
}

10 个回复

倒序浏览
你没有搞清楚变量的作用域问题,你的方法也没有返回值,局部变量在栈内存中,不同的方法有不同的变量存储空间,
而你两个方法中打印的是各自内存中对应的变量值,当然没有任何改变
回复 使用道具 举报
是不会变的
因为main中的x,y和swap中的x,y完全是不同的变量(传的只是值)
假如是引用型参数变量的话就不一样了,因为传递引用型参数传的是地址
回复 使用道具 举报
主函数里只是调用了方法swap,并将x,y这俩个参数传递过去,函数执行时将俩个数赋值给自己方法体内的局部变量,然后进行互换,并没有对主函数的x,y这俩个局部变量操作,所以函数执行完还是原本的。你这是局部变量和全局变量的问题,需要在类里添加属性x,y,即全局变量了,然后所有函数方法都使用它们,如果互换了自然会达到你想的那个效果
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
类中变量称为成员变量,作用于整个类中,而方法中变量叫做局部变量,随着方法结束释放
成员变量在对内存中
局部变量在栈类存中
如果你想改变成员变量的值,可以定义一下返回值,赋值给X,y
回复 使用道具 举报
wahaha 中级黑马 2013-2-20 17:19:22
7#
楼上的朋友们说的很详细
我再打个比方说明哈。主函数“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,了解点指针就灰常好理解鸟。呵呵
回复 使用道具 举报
朋友, 你那XY 定义的是局部变量,. 作用域只在一个大括号中. 下面函数置换了. 并不代表上面置换了..
回复 使用道具 举报
江华 中级黑马 2013-2-20 18:15:02
9#
兄弟,你的那个代码就好比,你给两个兄弟拍照了照片,说不好看,让两个兄弟去换衣,换完衣服,再指着他们原来的照片说,你们怎么没换衣服?
回复 使用道具 举报
//用大白话解释你的代码
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的消亡而消亡?
}
回复 使用道具 举报
//用大白话解释你的代码
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的消亡而消亡?
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马