引用类型和值类型作为参数的值是否会传递的浅解

一直对这个问题有点模糊,今天看了下api,又在网上看了下别人的贴子,在结合自己写的几个测试类,总算是对这个问题有个浅显易懂的认识了.

String、Integer、Double等等虽然都是引用类型,但是和一般引用类型不一样,它们都是immutable,也就是说不可改变,也可以说他们没有set方法。

当这些特殊的引用类型作为方法参数时(9行),参数在方法中被改变时(3行),不是在原先被被分配的内存区域中作改变,而是会另外在内存的堆栈中开辟一块新的区域存放改变的值。所以这些类型虽然是引用类型,虽然在方法中被修改,但是变量仍然指向的未被方法改变的内存区域。

 1 public class Demo305 {
 2     void change(String str){
 3         str+="change";
 4     }
 5     
 6     public static void main(String[] args) {
 7         String str="test";
 8         Demo305 test=new Demo305();
 9         test.change(str);
10         System.out.println(str);
11     }
12 }

输出结果
test

同理,String[],Map、Set等集合中的String值也不能被转递

 

转载于:https://www.cnblogs.com/ccspace/archive/2012/09/15/2686109.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值