您当前的位置: 首页 > 

Dongguo丶

暂无认证

  • 1浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

String对象的不可变性

Dongguo丶 发布时间:2017-11-20 10:54:37 ,浏览量:1

今天在牛客网上做了这么一道题

当时没怎么思考所以做错了,然后看了大佬们的解析

于是打算翻一翻String的源码

关于String类,JDK源码当中是这样的(我这里使用的是JDK1.8):

public final class String  
    implements java.io.Serializable, Comparable, CharSequence {  
    /** The value is used for character storage. */  
    private final char value[];  
    /** Cache the hash code for the string */  
    private int hash; // Default to 0  
    /** use serialVersionUID from JDK 1.0.2 for interoperability */  
    private static final long serialVersionUID = -6849794470754667710L;  
    ......  
}  
可以看到String类是final修饰的类。在Java中,我们知道,被final修饰的类是不允许被继承的,而且该类中的成员方法都默认为是final方法。    所以我们说String对象是不可变的,具有只读特性,也因此它是可以共享的。也正因为String对象是不可变的,我们在对String对象的进行任何操作的时候,其都会为我们生成一个新的String对象,并将原本的对象引用(或者新声明的对象引用)指向新的String对象,而原本的String对象并没有丝毫的改变。

下面来看段代码:

public class StringTest {
      public static void main(String[] args) {
            String nameXX = "Xiaobai";
            // 新生成了对象并指向新声明的引用
            String nameDX = nameXX.toLowerCase();
            System.out.println(nameXX);         // 结果为:  Xiaobai
            System.out.println(nameDX);         // 结果为:  xiaobai
      }
}
以上代码在调用String对象toLowerCase()方法的过程中,生成了一个新的String对象,并指向了新声明的nameDX引用,并不影响原本的nameXX。

关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.0402s