好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

浅谈java String不可变的好处

一、java内部string类的实现:

java 8:

?

1

2

3

4

5

public final class string

    implements java.io.serializable, comparable<string>, charsequence {

   /** the value is used for character storage. */

   private final char value[];

  }

java 9 及之后:(使用coder标识了编码)

?

1

2

3

4

5

6

7

8

9

public final class string

   implements java.io.serializable, comparable<string>, charsequence {

   /** the value is used for character storage. */

   private final byte [] value;

 

   /** the identifier of the encoding used to encode the bytes in  

   {@code value}. */

   private final byte coder;

}

二、为何要将string定义为final不可变?

因为在程序编写的过程中,会大量地用到string常量,如果每次声明一个string引用都要新建一个string对象,那么会造成空间的极大浪费。于是,在java的堆中开辟了一块存储空间string pool,用于存储string常量对象。当有多个string引用指向同样的string字符串时,实际上是指向的是同一个sting pool中的对象,而不需要额外的创建对象。

?

1

2

3

4

5

6

7

8

9

10

public class test{

   public static void main(string [] args){

    string a= "abc" ;

    string b= "abc" ; //对象保存在string pool中

    string c= new string( "abc" ); //以new创建的对象保存在堆中

    system.out.println( "a==b:" +(a==b));

    system.out.println( "a==c:" +(a==c));

       

  }

}

实现string pool就需要string定义为final,否则,当引用a、b都指向[abc]时,通过a将对象改变后,引用b所指向的对象被动地改变了。那程序员不得气得半死?

 三、string不可变的其他好处

1、以string作为hashmap的key,string的不可变保证了hash值的不可变。

2、string作为网络连接的参数,它的不可变性提供了安全性。

3、string不可变,所以线程安全。

以上所述是小编给大家介绍的java string不可变的好处详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

原文链接:https://HdhCmsTestcnblogs测试数据/cangwei22/p/10582600.html

查看更多关于浅谈java String不可变的好处的详细内容...

  阅读:16次