浅谈java String不可变的好处

网友投稿 265 2023-01-10


浅谈java String不可变的好处

一、java内部String类的实现:

java 8:

public final class String

implements java.io.Serializable, Comparable, CharSequence {

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

private final char value[];

}

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

phttp://ublic final class String

implements java.io.Serializable, Comparable, 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作为网络连接的参数http://,它的不可变性提供了安全性。

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中值传递和引用传递的区别
下一篇:注册接口测试用例怎么写(接口测试用例怎么写参数)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~