java的传值和传址问题争论不休,我的理解是两种情况都存在。对于基础类型数据,采用的是传值,而对于object类型的采用的是传址。刚开始的时候,我认为String虽然是对象类型,但是却是采用的传值,之后我发现,String的值虽然没有变,是有原因的,但可以肯定的是String与其他object一样,也是传址。要是有说的不对的地方,还请高人指点。
下面是测试代码:
package com.wangbiao.test;
/**
* java中的传值和传址的问题分析
* @author WangBiao
*2013-4-28上午10:31:31
*/
public class Test {
//参数为基础数据类型,为传值
public static void test_base_data_type(int a){
a=100;
}
//参数为String类型比较特殊,简单认为它也是传值。
public static void test_string(String str){
str="chengdu";
}
//参数为对象类型,为传址
public static void test_object(StringBuffer sb){
sb.append("is ok");
sb=new StringBuffer();
}
public static void main(String[] args) {
int a=5;
String str="wuhan";
StringBuffer stringbuffer=new StringBuffer("test");
test_base_data_type(a);
System.out.println(a);
test_string(str);
System.out.println(str);
test_object(stringbuffer);
System.out.println(stringbuffer);
//测试结果
// 5
// wuhan
// testis ok
}
}
内存分析图:
String类型分析
![](http://static.oschina.net/uploads/space/2013/0428/141229_VF0g_617909.png)
![](http://static.oschina.net/uploads/space/2013/0428/141241_u3Dy_617909.png)
![](http://static.oschina.net/uploads/space/2013/0428/141250_3kQ7_617909.png)
StringBuffer的分析
![](http://static.oschina.net/uploads/space/2013/0428/140300_UYUP_617909.png)
![](http://static.oschina.net/uploads/space/2013/0428/140315_S1rN_617909.png)
![](http://static.oschina.net/uploads/space/2013/0428/140327_DtH5_617909.png)