很简单了,因为String定义的对象是不可改变的,所以无论你在fun()方法里怎么改变s,都不会有作用!不然java的安全性不就是天大的笑话了吗?
而Vector是可以接受改变对象的,也就是说只要能够接受到它的聚丙,就可以任意改变它的对象!

解决方案 »

  1.   

    更简单点,可以把String看成一个简单的数据类型,虽然它是个类。
      

  2.   

    用String是不可变对象来解释这个问题好像不妥吧。
    如果按这个推理
    s="hehe";
    s1="haha";
    s=s1;
    岂不是得出了s还是hehe的结论。这里是向fun()里传参数的问题。我将Test2.java修改为如下:
    Test3.java
    import java.util.*;
    public class Test2{ public static void fun(Vector v){
    Vector v1=new Vector();
    v1.addElement("haha");
    v1.addElement("hehe");
    v=v1;
    } public static void main(String[] args) {
    Vector v=new Vector();
    fun(v);
    System.out.println("v is:");
    for(int i=0,n=v.size();i<n;i++){
    System.out.println((String)v.elementAt(i));
    }
    }
    }
    得到的结果是v的大小是0,和Test1的结果是一致的。
    Test2.java和Test3.java的写法有什么区别?
      

  3.   

    同意:因为String定义的对象是不可改变的
    对String的任何改变都相当于新建了一个String对象
    fun()函数里面的s变量指向这个新对象
    fun()函数外面的s变量还是指向原来的String对象
      

  4.   

    在你的第一个程序中
    public static void fun(String s){
     s="haha";
    }
    s 只在 这个函数中有效