首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

总结Java方法(函数)传值和传引用的有关问题

2013-09-28 
总结Java方法(函数)传值和传引用的问题  TestFun2.testStr(s)  System.out.println(s+s) //实参s引用

总结Java方法(函数)传值和传引用的问题

  TestFun2.testStr(s);

  System.out.println("s="+s); //实参s引用没变,值也不变

  }

  }

  执行结果打印:s=1

  (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

  import java.util.HashMap;

  import java.util.Map;

  public class TestFun3 {

  public static void testMap(Map map){

  map.put("key2","value2");//通过引用,改变了实参的内容

  }

  public static void main(String[] args) {

  Map map = new HashMap();

  map.put("key1", "value1");

  new TestFun3().testMap(map);

  System.out.println("map size:"+map.size()); //map内容变化了

  }

  }

  执行结果,打印:map size:2 。可见在方法testMap()内改变了实参的内容。

  (3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :

  public class TestFun4 {

  public static void testStringBuffer(StringBuffer sb){

  sb.append("java");//改变了实参的内容

  }

  public static void main(String[] args) {

  StringBuffer sb= new StringBuffer("my ");

  new TestFun4().testStringBuffer(sb);

  System.out.println("sb="+sb.toString());//内容变化了

  }

  }

  执行结果,打印:sb=my java 。

  所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。

  总结:

  第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

  第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

  第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

  呵呵,不知道我说清楚了没有

热点排行