java程序String类型作为参数的问题

一般来说,java里面A类调用B类的方法,并传递参数X()类型,因为通常实参是一个对象的引用,所以在B类的方法中修改传来的参数,在A类的原型也会发生变化。但我试过当实参为String类型时,在B类修改传入参数不会对A类的原型产生影响。为什么?除了String类型还有其他类型是这样的吗?
第一行X()类型应该是X(类型),开始写错了

推荐于2017-11-24
很高兴看到你的问题,我刚学Java那会也一直有这个疑问,前段时间我写了篇关于String的文章,其中有一段是解释这个问题的,希望你能明白。内容如下:
记得刚学习参数方法的时候有一个问题一直困扰着我:就是引用类
型的参数,经过方法修改后可以保留修改,也许我描述的不是很明确,看看代码:
public static void main(String[] args) {
String str = “abc”;
appendStr(str);
System.out.println(str);
}
private static void appendStr(String str){
str += “def”;
}
运行结果是“abc”而不是我想要的“abcdef”,不是说String是引用类型吗,怎么会这样?我想是不是String str = “abc”; 的问题,我就换成了这样:String str = new String(“abc”); 可还是一样。
解惑:
首先String是一个不可变类型,也就是说从声明那一刻起内存大小是固定的不可改变的,那么str += “def”; 这行代码背后又有什么不可告人的秘密呢?既然说了String是不可变的,你还愣是给加一个“def”,没办法JVM只能再开辟一块新的内存,把“abcdef”放进去,然后把新的地址给了str(appendStr方法中的),如果你在appendStr方法中输出str的值肯定是“abcdef”,也就是说appendStr方法中根本就没有改变初始存放“abc”那块内存的值(当然它想改也改了),当这个方法返回时main方法中的str依然是那个没修改前的引用,当然还是输出“abc”了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值