请问这个程序应该怎么改变 才可以实现两个数字的转换呢?public class Test {
public static void main(String[] args) {
int num1 = 2;
int num2 = 4;
System.out.println(
"Before invoking the swap method , num1 is" + 
num1 +  " " +  "num2 is " + num2 );
swap ( num1 , num2);
System.out.print( "After invoking the swap method , num1 is" +
 num1 + "num2 is " + num2);
} public static void swap ( int num1 , int num2){
int a;
a = num1;
num1 = num2;
num2 = a;
}
}

解决方案 »

  1.   

    基本类型是值传递,没办法在函数里改变main方法里的值,如果想换只能在main方法面换,生命一个中间值
    int temp;
    temp = a;
    a = b;
    b = temp;
      

  2.   

    给你看篇文章吧
    class Change{
      public void change(String str,char ch[],int i){
      str="test ok";
      ch[0]='g';
      i++;
      }
    }public class Test8 {
      public static void main(String args[]){
      String str="good";
      char ch[]={'a','b','c'};
      int i=3;
      Change cha=new Change();
      cha.change(str,ch,i);
      System.out.println(str);
      System.out.println(ch);
      System.out.println(i);
      }
    }
    结果为:
    good
    gbc
    3
    可见数组和其它类型不一样,传的是地址,结果改变这里需要解释一下,java基本类型(byte、int、char、long、float、double、boolean和short)是传值,也就是传的是副本,而其余传的是引用(所谓引用传递就是把对象的引用地址传进函数,而不是像值传递那样产生一个副本),对于字符串对象来说,虽然在参数传递的时候也是引用传递,但是java虚拟机在函数内部对字符串对象进行了特殊处理--视String对象为常量(final) 所以对传进来的引用地址所引用的string对象比能直接进行修改,而是产生一个副本对其进行操作,对其进行的操作不会影响原来的值。这就是为什么字符串和数组都是引用传递,字符串没变而数组变了的原因String传的是值,改变的是局部变量的值,对其他范围没有影响。
    Char[] 传的是地址,改变值就等于改变了内存中原先的数组的值。
    故答案为: good and gbc
      

  3.   

    这样就可以了:
    public class Test{
    public static void main(String[] args) {
    int num1 = 2;
    int num2 = 4;
    System.out.println(
    "Before invoking the swap method , num1 is" +  
    num1 + " " + "num2 is " + num2 );
    //swap ( num1 , num2);
    int a;
    a = num1;
    num1 = num2;
    num2 = a;
    System.out.print( "After invoking the swap method , num1 is" +
    num1 + " num2 is " + num2);
    }/*public static void swap ( int num1 , int num2){
    int a;
    a = num1;
    num1 = num2;
    num2 = a;
    }*/
    }
      

  4.   

    public class test_03 {
     public static void main(String args[]){
     int a = 2;
     int b = 3;
     
     a = a + b;
     b = a - b;
     a = a - b;
     
     System.out.println(a);
     System.out.println(b);
     }
    }
    //要说明的是,这里没引用第三个变量,而直接是两个变量之间的交换。
      

  5.   

    楼主先得明白Java方法的传值与传引用的区别;
    其次是明白什么是面向对象编程;Java是什么样的语言;public class Swap<T> { T firstField;
    T secondField;

    public Swap(T firstField, T secondField){
    this.firstField = firstField;
    this.secondField = secondField;
    }

    public void swap(Swap<T> swapObj){
    if(swapObj == null) return;
    T temp = swapObj.firstField;
    swapObj.firstField = swapObj.secondField;
    swapObj.secondField = temp;
    } @Override
    public String toString() {
    return "Swap [firstField=" + firstField + ", secondField="
    + secondField + "]";
    }

    }Swap<Integer> obj = new Swap<Integer>(2, 4);
    System.out.println(obj);
    obj.swap(obj);
    System.out.println(obj);
      

  6.   


    public class Test { public static void main(String[] args) {
           int num1 = 2;
           int num2 = 4;
           int a;
           System.out.println("Before invoking the swap method , num1 is" +" "+ num1 + ", " + "num2 is "+" "+ + num2 );
          // swap(num1,num2);
           a=num1;
           num1 = num2;
           num2=a;
           System.out.print( "After invoking the swap method , num1 is"+" " +num1+ ", " + "num2 is " +" "+ num2);
    }
    //static void swap(int num1,int num2){
    //  int a;
    //  a=num1;
    //  num1=num2;
    //  num2=a;
    //  System.out.println(num1+", "+num2);
    //
    // }