本帖最后由 java2000_net 于 2008-08-04 23:12:48 编辑

解决方案 »

  1.   

    因为java中所有的方法调用都是采用值传递的方法.
    注意
    public void setNewString(String str)
          {
              str = new String("a new String");
          }   a.setNewString(str); 
    参数中的str和方法定义中的String str是两个不同的变量,他们相同的地方是你调用方法的时候,他们指向同一个String对象,就是"aaa"
    但是在方法中str=new String("a new String");让方法里的str指向了一个新的变量,但是方法外面定义的str仍然指向"aaa"这个对象.
    方法结束之后,方法中的str变量就消失了,所以对"a new String" 的引用就不存在了,这个对象也就成为了垃圾.
    但是方法外面定义的str不会受到影响.
      

  2.   

    看看这个例子可以更好的明白 :
    public class Main {    public static void main(String[] args) {
            StringBuffer str = new StringBuffer("aaa");
            A a = new A();        System.out.println(str);
            a.setNewString(str);
            System.out.println(str);    }
    }class A {    public void setNewString(StringBuffer buffer) {
            buffer.append("修改了引用所指向的对象的内容");
            buffer = new StringBuffer("让buffer这个引用指向新的对象");
        }