一直来以为对值通报和地点通报相识的很清楚,适才在开源中国上看到一篇帖子先容了java中的值通报和地点通报,看完后感觉颇深。下边总结下以便更容易领略。
凭据以前的领略,java中根基数据范例是值通报,工具是地点(引用)通报。给各人看个例子:
public class ObjectTrans { public static void main(String[] args) { String name = "123"; SChange(name); System.out.println(name); } public static void SChange (String str) { str = "234"; } }
各人思考下,这个例子输出的功效应该是123呢照旧234呢?功效是123。why?一句话表达:工具也是值通报,只是把这个工具的引用copy了一份。
其实java原来就是值通报,没有c++那样的指针通报,分步阐明下上边的代码:
1、name = "123"
2、挪用SChange str 和 name 配合指向 “123”(拷贝name的引用赋给str)
3、str 从头赋值并指向“234”
4、name指向稳定照旧“123”
下边看别的一段代码:
public class ObjectTrans { public static void main(String[] args) { StringBuilder name = new StringBuilder("123"); SChange(name); System.out.println(name); } public static void SChange (StringBuilder str) { //str = "234"; str.append("234"); } }
那么这段代码输出的功效应该是什么呢?谜底是123234,why?同样分步阐明:
1、name = "123"
2、挪用SChange str 和 name 配合指向 “123”(拷贝name的引用赋给str)
3、改变所指向工具的值"123"+"234"
4、引用没变只是值变了,所以功效为123234
假如不大白请留言,本身好好阐明下。。。请记着一句话:java只有值通报。