java String不可变的优势是什么

java String不可变的优势是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、java内部String类的实现:

java String不可变的优势是什么

java 8:

publicfinalclassString
implementsjava.io.Serializable,Comparable<String>,CharSequence{
/**Thevalueisusedforcharacterstorage.*/
privatefinalcharvalue[];
}

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

publicfinalclassString
implementsjava.io.Serializable,Comparable<String>,CharSequence{
/**Thevalueisusedforcharacterstorage.*/
privatefinalbyte[]value;

/**Theidentifieroftheencodingusedtoencodethebytesin
{@codevalue}.*/
privatefinalbytecoder;
}

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

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

publicclassTest{
publicstaticvoidmain(String[]args){
Stringa="abc";
Stringb="abc";//对象保存在stringpool中
Stringc=newString("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不可变的优势是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!

发布于 2021-06-13 23:19:42
收藏
分享
海报
0 条评论
176
上一篇:C语言如何实现单链表控制台贪吃蛇小游戏 下一篇:C语言中如何实现猜数字小游戏
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码