Java字符串的参数传递为何没改变原本的值

Java字符串的参数传递为何没改变原本的值

例题

public class StringTest{
    String str = new String("good");
    char[] ch = {'t', 'e', 's', 't'};
    public void change(String str, char ch[]){
        str = "Hello";
        ch[0] = 'b';
    }
    public static void main(String[] args){
        StringTest s = new StringTest();
        s.change(s.str, s.ch);
        System.out.println(str);//输出good
        System.out.println(ch);//输出best
    }
}

解析


请牢记值传递机制,即:变量是什么就传什么值给形参

​ 本题change()中,传入了s的属性str的值(地址)给了形参str,然后再对形参str进行赋值。在这个过程中,没有通过属性str存储的地址对地址的数据进行任何修改(String类型也基本上是不能被修改的),而属性本身的地址值是不可能变的,所以方法执行后属性是不变的。

总结

  • 值传递,所以只是将变量的值传递给了形参(数据或地址值)
  • 想修改原来地址的数据只有通过传地址值的方式,并且通过这个地址值对数据进行修改
  • 传参数之后,原来变量的存储的值是不会变的:地址值不可能变化,只是地址指向的内容可能改变了;基本数据类型变量的数据也不可能改变
  • 字符串存储的内容(常量池中)无特殊情况是不能通过地址值改变的,只可能通过改变地址值来改变指向内容。所以字符串变量可以和基本数据类型基本等同看待,即传参调用后原本的值是不会改变的。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值