JAVA中的值传递和引用传递(Map & String & 对象 & 指针 & 引用)

Map<String, Object> map = new HashMap<String, Object>();
Map<String, String> params = new HashMap<String, String>();
map.put("params", params);
params.put("key", key);


Map的put不是put一个对象,而是put一个对象的引用!该对象更新后,Map里面被put的引用随着改变。

对于String,我用代码测试了一下:

String a = new String("111");
String b = a;
a = "222";
System.out.println(b);//结果是111
System.out.println(b.equals(a));//false

测试结果是b仍然为111。
String b = a;表示a和b指向同一个字符串"111"的引用。
a = "222";表示把a改变为指向"222"的应用,而此时b保持不变。


再看Sting数组
String a[] = { "1","2","3" },
String b[] = null;
b = a;
a[0] = "4";
System.out.println(b[0]); //结果是4
System.out.println(b.equals(a));//true

此时输出的又是4!这个跟上面的Map类似。

此时在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),这时候b与a指向同一个内存地址,即同一个对象(数组),改变数组a的值的时候,也就相当于改变了b的值。

[quote]Java对对象和基本的数据类型的处理是不一样的。和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。这种方式的参数传递被称为"值传递"。

而在Java中用对象的作为入口参数的传递则缺省为"引用传递",也就是说仅仅传递了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对这个对象的直接操作。

除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。
[/quote]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的集合List是一种常用的数据结构,它可以存储多个对象并且可以按照一定的顺序进行访问。而Map则是一种键对的映射表,它也可以存储多个对象,但是访问的方式是通过键而不是索引。有时候,我们需要将一个List集合的多个Map对象转换成一个List,这时可以通过遍历List集合Map对象,将每个Map的value取出来,然后添加到新的List。 具体流程如下: 1. 创建一个新的List对象,用于存储Map对象的value。 2. 遍历List集合Map对象,获取Map的value。 3. 将value添加到新的List。 4. 返回新的List对象即可。 下面是示例代码: ``` // 创建一个List<Map<String, Object>>集合 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); // 添加多个Map对象到List Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("name", "张三"); map1.put("age", 20); list.add(map1); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("name", "李四"); map2.put("age", 21); list.add(map2); // 将List集合Map对象转为List List<Object> resultList = new ArrayList<Object>(); for (Map<String, Object> map : list) { resultList.add(map.get("name")); resultList.add(map.get("age")); } // 输出新的List对象 System.out.println(resultList); ``` 以上代码运行结果为:[张三, 20, 李四, 21]。 注意:在实际应用,如果List集合Map对象的属性名和属性类型不同,需要根据具体情况进行适当的数据类型转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值