浅谈java String不可变的好处
2019-03-28 11:04
811 查看
一、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不可变的好处详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
相关文章推荐
- Java String 设计为不可变类型的好处
- JAVA String 不可变对象
- java之String对象的不可变性
- 占小狼-Java进阶之路-浅谈Java String内幕(二)
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
- java之String不可变思考
- Java中String类型的不可变性和驻留池
- java学习心得(一) String的不可修改以及 == 和equal的区别
- JAVA String 不可变性 / Hibernate_Validator学习
- java基础解析系列(九)---String不可变性分析
- Java中String 的不可变性
- java中string的不可不知的编码知识
- java基础入门-你不知道的string-不可改变性与编译器优化
- JAVA不可变类(immutable)机制与String的不可变性
- 彻底解开Java中String对象不可变的迷雾,让你不在疑惑
- 浅谈Java String内幕(2)
- 在Java中为什么String不可变
- 浅谈java分页三个类 PageBean ResponseUtil StringUtil
- 浅谈Java String内幕
- 转:浅谈Java中数据在内存中的状态,以及String、StringBuffer、==、equals、数组等问题