java里面关于String对象的几个误区

下面来看几个例子:

1. String s1 = "hello";

    String s2 = "hello";

    String s3 = new String(s1);

    System.out.println(s1==s2);//true

    System.out.println(s1==s3);//false

   第一个输出为true,因为"hello"可以看作是String类的一个实例对象,而s1,s2都是它的引用。

    第二个输出为false,因为new出来的,引用不再指向原来的地方。

2.  String str = "hello";

    changeStr(str);//调用changeStr()方法想要把str修改为hi

    System.out.println(str);//结果为hello,并没有变成hi

    ......

    public static void changeStr(String str){

        str = "hi";

    }

    形参类型无非两种一种为基本类型也就是传的是值,另一种是句柄类型,java里面传的是引用。但String类型不是基本类型啊,对它本来传的是引用,但是参考String 类型源码的实现:

public String replace(char old,char new) {
              .......
    if (i < len) {
char buf[] = new char[len];//对,没错它是在成员方法的局部空间内new出来的,

                                               构造的是一个String的char序列的副本,改变的是形参

                                                因此针对原来的String对象来说并没有发生改变

                ......
return new String(0, len, buf);

              }


参考资料博客:https://bbs.csdn.net/topics/60040580

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值