美文网首页
java字符串

java字符串

作者: 追风的徐小白 | 来源:发表于2016-08-29 16:55 被阅读0次

    1. 字符串

    String在java.lang包里,是个final类,不可被继承。它的主要通过一个字符数组来存储。

    private final char value[];
    

    2. 字符串的不可改变特性(immutable)

    2.1 什么是不可变

    比如,String a = "abc";a = "abcdef",不是在原内存地址上修改数据,而是在内存区域重新创建了值为"abcdef"的字符串(如果字符串池中"abcdef"已存在,则不创建),将a指向此内存地址。

    2.2 不可变有什么好处

    Java把String设成immutable最大的原因应该是效率和安全。

    • 不可变对象可以提高String Pool的效率和安全性。
      如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。对于同时引用这个“ABC”的其他变量也不会造成影响。
    • 不可变对象对于多线程是安全的.
      因为在多线程同时进行的情况下,一个可变对象的值很可能被其他进程改变,这样会造成不可预期的结果,而使用不可变对象就可以避免这种情况。

    2.3 如何实现的不可变

    String的主要成员 char []value 是 private final的。final限制了value这个存在stack中的引用地址不能改变。但是,heap中数组存储的数据怎么保证不变呢?String中的所有方法都没有动value数组中的数据,private 私有修饰符确保不暴露给外界,并且String中也没有value的setter方法。String类的final属性,防止继承者破坏。

    3. 字符串常量池

    如果按照下面赋值:

    String a = "aa";
    String aa = "aa";
    

    则a 和 aa 指向同一个内存地址.

    相关文章

      网友评论

          本文标题:java字符串

          本文链接:https://www.haomeiwen.com/subject/sqoxettx.html