JAVA调用方法传String的问题

今天看到个面试题,突然想到java调用方法传的的String 是个类,但是修改后原来的值确不会改变,像这样----

public class Example{

    String str = new String("good");

    char[] ch = {'a','b','c'};

    public static void main(String[] args){

        Example e = new Example();

        e.change(str ,ch);

        System.out.println(str);

        System.out.println(ch);

    }

    public void change(String str,char ch[]){

        str = "test  ok";

        ch[0] = 'g';

    }

}

输出结果也很明显了, 是 good 和 abc。结合了一下大佬们的知识点,可以做个比喻。

java传递只有值传递,但是这个值可以是个引用,基本类型传的是值,类则传递的是引用,但是调用方法传递的都是,对象的拷贝,也就是说char ch[]传递的就是引用拷贝。

可以把引用比喻成一个钥匙,内存中的值比喻成一个房子,(在哪看到的忘记了,大概率是某乎,哈哈,很形象的比喻),那么char ch[]传递。意思就是钥匙A可以开这个叫A的房子,现在复制了一把钥匙 A‘ 也可以开A房子,把 A’给了别人(传递),别人用A‘开了A房子,把里面的电视机拿走了,那么你用A钥匙开了A房子 也会发现里面的电视机被拿走了,这是毋庸置疑的。

这里我又做了个测试

把方法修改一下

public void change(String str,char ch[]){

    str = "test  ok";

    ch = new char[] {'s'};

}

这样之后输出的值没有改变System.out.println(ch);还是 abc,并不是s

这个可以这样理解 给了别人A’的钥匙,但是这里new了一个新的内存地址并且让ch指向了它,那么就是造了个A’的房子,并且把A‘的钥匙拿去加工或者直接换了一把和A’的房子对应的钥匙,然后拿走了A‘房子里的电视机,但是A房子中并无改变,所以还是abc。

那么String 传递的也是引用,String = "",就是String = new String("");那么其实就是上面的原理。

唉舒服了,第一次写博客,有问题求大佬指教~~~

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值