关于Map类型变量作用范围的疑问

请先看下面的代码,非常简单:

public static void main(String[] args) {

int i = 1;
plus(i);
System.out.println(i);  [b]// 打印 1[/b] 

     Map map = new HashMap();
map.put("orange", "ORANGE");
addOneEntry(map);
System.out.println(map);  [b]// 打印 {orange=ORANGE, apple=APPLE}[/b]}

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也一样)类型的变量会这样?
谢谢各位大虾!

[color=blue][b]
传递的是引用值,通过引用值修改的是同一块内存区域。

好好理解下吧,参考下我的博客:《图解Java中的值传递与引用传递(更新版)》[/b][/color]

[url]http://xiaolongfeixiang.iteye.com/blog/652235[/url]

呵呵 楼上很猛嘛!

这个其实是个很实际的问题!

送你两句话 解决问题
1.0 java 只有值传递(相对址传递来说的)
2.0 当你传过去的是 对象引用时 可以改变原有对象的属性或者值

分析下你的例子:

[quote] addOneEntry(map); [/quote]

这里 map 是不是 可以找到整个对象map 呢! 他就是引用!
你给 map 添加个对象 会改变 map 的! 符合第2条!

如果你传的 是 int i 这样是传过去的值 不会改变的!