一个小小的疑问关于java是值传递

不爱吃萝卜的兔子 2011-05-13 12:48:22
我有个小疑问,坐等高手解释:
public class ReferenceOrValueTest {

/**
* @param args
*/
public static void main(String[] args) {
Map<String,List<String>> map = new HashMap<String,List<String>> ();
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
map.put("a", list);
System.out.println("size:"+map.get("a").size());
//获取到map中的List
List<String> newList = map.get("a");
//给该List添加新的值
newList.add("3");
newList.add("4");
//如果是值传递的话,改变newList的值应该不会影响到
//map中的list的值,可是结果是改变了,为什么?
System.out.println("size:"+map.get("a").size());
}

}

...全文
89 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-05-13
  • 打赏
  • 举报
回复
其实你可以很简单的通过System.out.println(list == newlist)来判断一下就知道了
哈哈哈3234 2011-05-13
  • 打赏
  • 举报
回复
lz我建议你多看看内存解析!你就明白了!
qybao 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fan578 的回复:]
引用 2 楼 qybao 的回复:
类似于newList = map.get("a"); 等于把list对象的地址传递给newList,而map中和“a"对应的
是list的地址?
[/Quote]
map中和“a"对应的是list所指向的对象的地址,newList = map.get("a");是把和“a"对应的list所指向的对象的地址赋给newList,所以list和newlist指向的是同一个对象的地址
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qybao 的回复:]
List<String> list = new ArrayList<String>();
list是个变量,他的值是new ArrayList<String>();所生成对象的地址
所谓的对象的值传递不是指对象的内容传递,而是指对象的地址作为一个值传递
以前的java教材跟C差不多,有值传递和地址(引用)传递之分
不知何故不知从何时开始,java开始鼓吹都是值传递,因为java没有指针概念……
[/Quote]
类似于newList = map.get("a"); 等于把list对象的地址传递给newList,而map中和“a"对应的
是list的地址?
qybao 2011-05-13
  • 打赏
  • 举报
回复
List<String> list = new ArrayList<String>();
list是个变量,他的值是new ArrayList<String>();所生成对象的地址
所谓的对象的值传递不是指对象的内容传递,而是指对象的地址作为一个值传递
以前的java教材跟C差不多,有值传递和地址(引用)传递之分
不知何故不知从何时开始,java开始鼓吹都是值传递,因为java没有指针概念,其实不管什么说法,自己理解其中的原理就好,没必要纠结这在这些无聊的概念上
我是风 2011-05-13
  • 打赏
  • 举报
回复
Java中的对象,除了String,貌似都是引用传递的吧。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧