当前位置:编程学习 > JAVA >>

小菜 请教值传递&引用传递


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类型的是基本数据类型,应该不会改变,可是,运行结果为什么是:

--------------------编程问答-------------------- 第二个实际上仍然是传递的是数组的引用,因此应该能改写数组元素指向的值,如果改成Exchange(...char ar)应该就不会导致数组元素被改写。 --------------------编程问答-------------------- 第一个暂时还没弄明白。 --------------------编程问答-------------------- 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 楼 dr8737010 的回复:
String属于不可变对象,str传递给Exchange方法,产生了一份str的拷贝,对拷贝进行修改,变成新值"Hi",需要产生一个新的String对象来容纳新值,因此拷贝变成了新值"Hi",而旧的str则不受影响。

char类型虽然是基本类型,但是char[]属于引用类型,方法体内修改了引用所指向的对象的值,所以源对象也受到影响。

这两种情况可以这样解释:
……

这个解释挺好. --------------------编程问答-------------------- java没有引用传递的。。都是值。。。 --------------------编程问答-------------------- 3楼  3楼
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,