欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

浅谈java String不可变的好处

时间:2021-05-23 08:06:32|栏目:JAVA代码|点击:

一、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实现删除某条信息并刷新当前页操作

栏    目:JAVA代码

下一篇:maven的生命周期及常用命令介绍

本文标题:浅谈java String不可变的好处

本文地址:http://www.codeinn.net/misctech/127162.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有