class  Exchange
{void exchange(int a,int b)
{
    
    int c;
    c=a;
    a=b;
    b=c;   }
public static void main(String[] args) 
{
int e=1;
int f=3;
Exchange db=new Exchange ();
System.out.println(e+" "+f);
db.exchange(e,f);
System.out.println(e+" "+f); }
}
上面那段代码的函数exchange()是传值引用,无法达到交换a,b值的目的;
如果用C,可以使用指针,
请问用java怎么实现?

解决方案 »

  1.   

    java中的基本类型的变量是无法做到这一点的,只有对象才能做到值相互交换,你用Integer代替int就行了。
      

  2.   

    java中只有值传递。传递的是副本。
      

  3.   


    int e = 1;
    int f = 3;e = e + f;   //e = 4
    f = e - f;   //f = 1
    e = e - f;   //e = 3System.out.printf("e = "+e+",f = "+f);
      

  4.   


    你评什么说用Interger就可以?你试过吗?
    如果没有试过,最好不了为了得点分而误导别人
      

  5.   

    很有意思的问题,不过用了integer好像也不行啊
      

  6.   

    前段时间正好复习了一个排序算法,因为书是C++的,所以自己写了个模拟c++的swap()功能的类,很简陋的,达人不要笑啊……http://blog.csdn.net/RolanJ/archive/2008/11/11/3275753.aspx
      

  7.   


    用Integer试了一下,确实不行,仓促回帖,抱谦了。
    分析了一下原因,应该是在一个方法里面,即使形式参数的对象引用被改变了,也只是在这个方法中被改变了,出了这个方法,这个引用又被还原了。所以需要在方法中改变这个对象里面的值,那么出了这个方法,对象里面被改变的值才依然有效。下面是个例子,验证过的。class IntExchange{
    int value;
    public IntExchange(int i){
    value = i;
    }

    }public class TestExchange {
    public static void exchange(IntExchange e, IntExchange f){

    int temp;

    temp = e.value;

    e.value = f.value;

    f.value = temp;
    }

    public static void main(String[] args) {

    IntExchange e = new IntExchange(5);

    IntExchange f = new IntExchange(7);

    exchange(e,f);

    System.out.println(e.value);

    System.out.println(f.value);
    }


    }
      

  8.   

    int a=0;
    int b=1;
    a=a^b;
    b=a^b;
    a=a^b;
    非得在函数中搞交换吗?
      

  9.   

    自己建一个类,其中两个 int 类型的域,swap 返回这个类的对象也可以实现这个功能。参考 Core Java 2 中关于inner class的内容,其中有一个关于同时返回最大最小值的例子,情况比较类似。因为 Java 是值调用,call by value,方法得到的实际上是一个参数对象的值的拷贝。对这个拷贝的操作不会影响原参数的值。但如果参数是一个对某一实例的引用,值拷贝得到的是对同一对象的引用,那么方法中的语句还是有可能对这个对象的成员进行更改的。上面说用 Integer 对象还是不能实现,可能是受了autoboxing 的影响。
    class Pair
    {
       public Pair(int a, int b)
       {
          first = a;
          second = b;
       }
       public int getFirst() { return first; }
       public int getSecond() {  return second; }   private int first;
       private int second;
    }...
       public Pair swap(a,b){      return newPair(b,a);
       }
    ...{
      

  10.   

    上面 new Pari(b,a) 漏了一个空格,不好意思。
      

  11.   

    同意17楼
    class  Exchange
    {
    public void exchange(int a,int b)
    {   
        int c;
        c=a;
        a=b;
        b=c; 
        System.out.println(a+" "+b);  //***************新加的
    }
        public static void main(String[] args) 
        {
            int e=1;
            int f=3;
            Exchange db=new Exchange();
            System.out.println(e+" "+f);
            db.exchange(e,f);
            System.out.println(e+" "+f);    }
    }结果是
    1 3 
    3 1 
    1 3
      

  12.   

    java里面要交换两个变量的值,通过传递类的引用来实现操纵它的成员变量的值:如下:此代码调试通过:public class Exchange { private int e=1;
    private int f=3;

    public void Exchange(Exchange ex){
    int c;
    c=ex.e;
    ex.e=ex.f;
    ex.f=c;
    }
    public static void main(String[] args) {
    Exchange ex=new Exchange();
    System.out.println("e,f交换之前:");
    System.out.println("e="+ex.e);
    System.out.println("f="+ex.f);
    ex.Exchange(ex);
    System.out.println("e,f交换之后:");
    System.out.println("e="+ex.e);
    System.out.println("f="+ex.f);
    }
    }输出结果:
    e,f交换之前:
    e=1
    f=3
    e,f交换之后:
    e=3
    f=1
    看和你自己的程序有啥区别,好好分析一下,至于你理解是传值还是传的引用,好多人讨论这个问题,随你自己的理解