想用一个方法改变主涵数的变量值,小程序如下,但是却改变不了,是怎么回事?帮帮忙!!
public class help
{    
        public static void change(Object a,Object b)
       {
             Object c;
             c=a;
             a=b;
             b=c;
                 }
        public static void main(String[] args)
          {
        int a=1,b=20;
         change(a,b);
        System.out.println("a="+a+",,b="+b);
           }}
打印出来的结果还是a=1,b=20,怎么写change()这个方法,让主函数中a=20,b=1?

解决方案 »

  1.   

    传到change函数里的a,和b只是值和外面的a和b相同,并不是外面的a和b了,相当于将change展开如下
    int a=1,b=20;Object A = new Integer(a);//自动装箱
    Object B = new Integer(b);//自动装箱
    Object c;
    c=A;
    A=B;
    B=c;可见并没有更改a和b的值,你只是调换了A和B而已
      

  2.   

    楼主 
    你这个a b 是局部变量吧
    变换以后没返回来
    我也是新手
    说的可能不对 
    我改了一下就可以了
    把交换后的值放到数组里返回来了public class text
    {    
            public static int[] change(int a,int b)
           {
                 int c;
             
                 c=a;
                 a=b;
                 b=c;
                 int [] d={a,b};
                 return d;
                     }
            public static void main(String[] args)
              {
            int a=1,b=20;
            int d[]=change(a,b);
             a=d[0];
             b=d[1];
            System.out.println("a="+a+",,b="+b);
               }}
      

  3.   

    1.用位操作符:int a = 5;
    int b = 6;a = a ^ b;
    b = a ^ b;
    a = a ^ b;2.利用加减法:a = a + b;
    b = a - b;
    a = a - b;
    字符类型的交换(利用字符串函数):a=a+b;
    b=a.substring(0,a.length-b.length);
    a=a.sbstring(b.length);
      

  4.   

    因为int是java的原生类型,不是object,
    你用Integer就能得到你想要的效果了。
      

  5.   

    JAVA分2种数据类型 1> 基本数据类型: 在栈内存中, 是传递的是数据的拷贝
                      2> 引用数据类型: 是引用的拷贝;而你的 int 数据类型则是属于第一种,它只对副本进行操作,不改变原来的值
      

  6.   

    public class help
    {    
            public static void change(Object a,Object b)
           {
                 Object c;
                 c=a;
                 a=b;
                 b=c;
                 System.out.println("a="+a+",,b="+b);
                     }
            public static void main(String[] args)
              {
            int a=1,b=20;
             change(a,b);
            
               }}
    这个好象是传值调用,并没有改变它本身的值,
      

  7.   

    受教,感谢各位,特别感谢infowain(infowain),ouyangsusu(HOHO~) 
      

  8.   

    killme2008没有明白我想要什么,呵呵,希望大家接着给办法
      

  9.   

    public class text
    {    
            public static int[] change(int a,int b)
           {
                 int c;
             
                 c=a;
                 a=b;
                 b=c;
                 int [] d={a,b};
                 return d;
                     }
            public static void main(String[] args)
              {
            int a=1,b=20;
            int d[]=change(a,b);
             a=d[0];
             b=d[1];
            System.out.println("a="+a+",,b="+b);
               }}
      

  10.   

    int 是原始类型,java中原始类型传递的是数值,
      

  11.   

    public static void change(int a,int b)
           {
                 int c;
                 c=a;
                 a=b;
                 b=c;
                  System.out.println("a="+a+",b="+b);
                     }
            public static void main(String[] args)
              {
            int a=1,b=20;
             change(a,b);
           
               }这样不就可以了吗?
      

  12.   

    int 为java的基本数据类型,传过去的是副本不会改变其原值封装成对象,传地址应该就可以了
      

  13.   

    你变换的只是一个引用,而没有更本的变换,参数可以用对象或者数组
    class help
    {    
            public static void change(int [] a,int [] b)
           {
                 int [] c=new int[1];
                 c[0]=a[0];
                 a[0]=b[0];
                 b[0]=c[0];
                     }
            public static void main(String[] args)
              {
            int a[]=new int[1];
    int b[]=new int[1];
    a[0]=1;
    b[0]=20;
            change(a,b);
            System.out.println("a="+a[0]+",,b="+b[0]);
               }}
      

  14.   

    用对象的引用
     class help
    {   
    int a;
    int b; 
            public static void change(help h)
           {
                 help c=new help();
                 c.a=h.b;
                 h.b=h.a;
                 h.a=c.a;
                     }
            public static void main(String[] args)
            {
             help a1=new help();
             help a2=new help();
             a1.a=1;
             a1.b=20;
             change(a1);
             System.out.println("a="+a1.a+",b="+a1.b);
            
            
            
            }}
      

  15.   

    在JAVA中,所有的参数(包括基本类型和类)都是传的值拷贝,对它的修改不会影响到调用者中的值。
      

  16.   

    jackyyb(最酷的) :
    这回你错了
    在JAVA中,没有传引用的概念。那是C的做法
      

  17.   

    用class.x=y这样就可以改变他的值。