java函数的参数传递和String类型

来源:互联网 发布:网络喷子无脑 编辑:程序博客网 时间:2024/05/19 17:47

以下内容摘自java函数的参数传递和String类型 http://www.blogjava.net/thuixy/archive/2009/06/06/280302.html

 

说完了java的String类型,我们最后看看java函数参数的传递,到底是值传递还是引用传递呢?一般的说法是对于基本类型比如int、char是值传递,对于对象类型是引用传递。这种说法没错,但是请看下面的例子

String s=”abc”;

change(s);

System.out.println(s);

public void change(String str)

{

     str=”abcd”;

}

上面的程序会有什么结果呢?打印abc还是abcd,运行程序会发现打印的是abc,完了,似乎不合乎常理,按理说String 也是对象,应该是引用传递才对啊,有的同学知道java的String类型是不可变类型,会得出结果abc,具体解释是String就相当于是char[]的包装类。包装类的特质之一就是在对其值进行操作时会体现出其对应的基本类型的性质。在参数传递时,包装类就是如此体现的。所以,对于String在这种情况下的展现结果的解释就自然而然得出了。同样的,Integer、Float等这些包装类和String在这种情况下的表现是相同的。下面从函数参数传递的方式来理解也可以得出相同的结果

java的参数传递本质上都可以认为是值传递,对基本类型自然不必说,对于对象类型,传递的是对象的地址,地址是个数字,也是基本类型,所以也还是值传递的, 有了这个基础,上面的题目可以这样理解,s是字符串abc的地址,调用change方法时,把s的拷贝赋给str,即str也指向abc,但是在方法里又把str指向abcd,str就是abcd的地址了,但是s还是指向的abc。

原创粉丝点击