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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亚男 黑马帝   /  2012-3-2 11:00  /  2339 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qwert 于 2012-3-2 19:02 编辑

今儿个在回顾老视频的时候,遇到一个小问题,突然晕了……
请前辈们解释下,勿笑……
  1. class  Swap
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=8;
  6.                 int y=9;
  7.                         System.out.println("x="+x+",y="+y);
  8.         Swap_3(x,y); //这里使用了置换方法,为什么打印出来还是没有置换……如果不用方法,直接写在主方法里或者把输出语句放在Swap_3(int a,int b)里是可以的..请前辈解释下..
  9.                         System.out.println("x="+x+",y="+y);
  10.         }
  11.                 public static void Swap_3(int a,int b)
  12.         {
  13.                 a = a ^ b;
  14.                 b = a ^ b;
  15.                 a = a ^ b;

  16.         }

  17. }
复制代码

4 个回复

倒序浏览
形参传递的是实参的复制体,函数改变了复制体的值,而实参并没有改变。
回复 使用道具 举报
本帖最后由 泮和顺 于 2012-3-2 21:27 编辑

#include<stdio.h>
void swap(int *a,int *b)
{
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;
}
int main()
{
        int a,b;
        scanf("%d%d",&a,&b);
        swap(&a,&b);
        printf("%d %d\n",a,b);
        return 0;
} c语言版本的这样可以传递实参的 但是JAVA怎么改写呢
回复 使用道具 举报
泮和顺 发表于 2012-3-2 20:51
#include
void swap(int *a,int *b)
{

JAVA不象C 有指针,只能交换对象属性的值(数组内元素的值也行),例如:
  1. public class Test {
  2.         int a,b;
  3.         public static void main(String[] args) {
  4.                 Test t=new Test();
  5.                 t.a=3;t.b=5;
  6.                 swap(t,t.a,t.b);
  7.                 System.out.println("a="+t.a+"  b="+t.b);
  8.     }
  9.         public static void swap(Test t,int m,int n){               
  10.                 t.a=n;
  11.                 t.b=m;
  12.         }
  13. }
复制代码
回复 使用道具 举报
谢谢大家,我已经明白了~~
真是太感谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马