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类型分析
StringBuffer的分析