评论

收藏

[Java] 浅谈java String不可变的好处

编程语言 编程语言 发布于:2021-09-17 23:20 | 阅读数:528 | 评论:0

这篇文章主要介绍了java String不可变的好处,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、java内部string类的实现:
java 8:
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标识了编码)
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中的对象,而不需要额外的创建对象。
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不可变的好处详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对CodeAE代码之家网站的支持!
原文链接:https://www.cnblogs.com/cangwei22/p/10582600.html
关注下面的标签,发现更多相似文章