public class TestJava
{
public static void main(String[] args)
{
String str = "Hello";
char[] array = {'L', 'U', 'C', 'Y'};
System.out.println(str);
System.out.println(array);
Exchange(str, array);
System.out.println(str);
System.out.println(array);
}

public static void Exchange(String str, char[] ar)
{
str = "Hi";
ar[0] = 'A';
}
}上面这个程序,string是对象类型,char是基本数据类型,按照道理,string应该是引用类型,传进去之后,应该会改变啊,相反,char类型的是基本数据类型,应该不会改变,可是,运行结果为什么是:

解决方案 »

  1.   

    第二个实际上仍然是传递的是数组的引用,因此应该能改写数组元素指向的值,如果改成Exchange(...char ar)应该就不会导致数组元素被改写。
      

  2.   

    String属于不可变对象,str传递给Exchange方法,产生了一份str的拷贝,对拷贝进行修改,变成新值"Hi",需要产生一个新的String对象来容纳新值,因此拷贝变成了新值"Hi",而旧的str则不受影响。char类型虽然是基本类型,但是char[]属于引用类型,方法体内修改了引用所指向的对象的值,所以源对象也受到影响。这两种情况可以这样解释:
    1.  A引用和B引用都指向了 X对象,但B又被指向了新对象Y,所以A引用丝毫没受影响
    2. A引用和B引用都指向了 X对象,但X对象又被改变了,所以通过A引用去得到X对象的值,发现修改了。
      

  3.   

    java没有引用传递的。。都是值