问题描述
请先看下面的代码,非常简单:public static void main(String[] args) {int i = 1;plus(i);System.out.println(i); // 打印 1 Map map = new HashMap();map.put("orange", "ORANGE");addOneEntry(map);System.out.println(map); // 打印 {orange=ORANGE, apple=APPLE}}private static void plus(int i){i += 1;}private static void addOneEntry(Map map){map.put("apple", "APPLE");} 我的问题就在这里,我的map变量定义在main方法内,按理说它应该是局部变量,但为什么它还会受addOneEntry()方法的影响,出了这个方法后还会增加多一个entry?就好像它是静态变量一样... 我试过int,String,数组和自定义类型的变量,他们的作用范围都只限于声明它们的方法内,为什么Map(List也一样)类型的变量会这样? 谢谢各位大虾!
解决方案
传递的是引用值,通过引用值修改的是同一块内存区域。好好理解下吧,参考下我的博客:《图解Java中的值传递与引用传递(更新版)》http://xiaolongfeixiang.iteye.com/blog/652235
解决方案二:
呵呵 楼上很猛嘛!这个其实是个很实际的问题!送你两句话 解决问题1.0 java 只有值传递(相对址传递来说的)2.0 当你传过去的是 对象引用时 可以改变原有对象的属性或者值分析下你的例子:引用 addOneEntry(map); 这里 map 是不是 可以找到整个对象map 呢! 他就是引用!你给 map 添加个对象 会改变 map 的! 符合第2条!如果你传的 是 int i 这样是传过去的值 不会改变的!