嗯,建义你查找了一下那些"传值","传址"的文章。
class B{
B(){b=10}
int b;
}foo(int a,B b)
{
  a=10;//这里面的改变对外没作用
  b.b=20; //这个改变有效 
 b=new B(); //这个改变同样没有作用
  
  
}

解决方案 »

  1.   

    java中复杂的对象使用引用传递,例如Hashtable,ArrayList等等。
    简单的对象和简单类型都是值传递,如String,Integer,int,boolean...
    所以如果java中函数的参数是复杂的对象类型是可以带回值的,不过这种方法在java中不建议使用。
      

  2.   

    谢谢二位! zone2000(爱情地带) :
      b.b=20; //这个改变有效吗? int x;
    B y;
    foo(x,y);
    这是y.b是20吗?我还是自己写段代码试试
      

  3.   

    补充一下:这里说的对象是指 wanglh2000() 所说的
    非String,Integer,int,boolean之类的复杂对象
      

  4.   

    这段程序,我看不懂class Test
    {
      public static void main(String args[])
      {
        int val;
        StringBuffer sb1, sb2;    val = 10;
        sb1 = new StringBuffer("apples");
        sb2 = new StringBuffer("pears");
        System.out.println("val is " + val);
        System.out.println("sb1 is " + sb1);
        System.out.println("sb2 is " + sb2);
        System.out.println("");    System.out.println("calling modify");
        //按值传递所有参数
        modify(val, sb1, sb2);
        System.out.println("returned from modify");
        System.out.println("");    System.out.println("val is " + val);
        System.out.println("sb1 is " + sb1);
        System.out.println("sb2 is " + sb2);
      }  public static void modify(int a, StringBuffer r1,
                                StringBuffer r2)
      {
          System.out.println("in modify...");
          a = 0;
          r1 = null;  //1
          r2.append(" taste good");
          System.out.println("a is " + a);
          System.out.println("r1 is " + r1);
          System.out.println("r2 is " + r2);
      }
    }
      

  5.   

    其实传递的是指向你要转递的对象(注意是对象,不包括int,char这些基本类型)的reference,而不是复制该对象,所以你在函数中修改“复制”的对象的属性其实就是修改了 你原先要传递的那个源对象的属性,调用方法是同样道理,除非你在函数中使引数指向另外一个对象,不然改变的都是原先那个对象的值,和指针有些区别但也有相似之处。
      

  6.   

    同意
    eiawd(天地男儿) :
    的说法!java中很多概念和c/c++的一些概念类似有不完全相同的!
      

  7.   

    to superscreen:
       因为java本身是通过传值来实现的(与c相似的),所以在函数中的操作不会影响参数的使用。
      例如在函数
      public static void modify(int a, StringBuffer r1,
                                StringBuffer r2)
      {
          System.out.println("in modify...");
          a = 0;
          r1 = null; 
    /////////////////////////////////////
          r1=new StringBuffer("is not null");
    //////////////////////////////////////////////      r2.append(" taste good");
          System.out.println("a is " + a);
          System.out.println("r1 is " + r1);
          System.out.println("r2 is " + r2);
      }
    }
    可以看出依然没有修改r1的值,
    为什么r2的值发生变化,是因为r1,r2传送的都是地址,函数modify对r2所指的内容进行了添加,虽然r2本身没变,但是其指向的内容改变了。