java 传引用_JAVA中的值传递和引用传递(Map & String & 对象 & 指针 & 引用) - 没有什么能够阻挡,你对自由的向往 - ITeye博客...

Map map = new HashMap();

Map params = new HashMap();

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的值。

引用

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

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

除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-04-21 16:05

浏览 15902

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值