浅谈java String不可变的好处
一、java内部String类的实现:
java8:
publicfinalclassString implementsjava.io.Serializable,Comparable,CharSequence{ /**Thevalueisusedforcharacterstorage.*/ privatefinalcharvalue[]; }
java9及之后:(使用coder标识了编码)
publicfinalclassString implementsjava.io.Serializable,Comparable,CharSequence{ /**Thevalueisusedforcharacterstorage.*/ privatefinalbyte[]value; /**Theidentifieroftheencodingusedtoencodethebytesin {@codevalue}.*/ privatefinalbytecoder; }
二、为何要将String定义为final不可变?
因为在程序编写的过程中,会大量地用到String常量,如果每次声明一个String引用都要新建一个String对象,那么会造成空间的极大浪费。于是,在java的堆中开辟了一块存储空间Stringpool,用于存储String常量对象。当有多个String引用指向同样的String字符串时,实际上是指向的是同一个Stingpool中的对象,而不需要额外的创建对象。
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)); } }
实现Stringpool就需要String定义为final,否则,当引用a、b都指向“abc”时,通过a将对象改变后,引用b所指向的对象被动地改变了。那程序员不得气得半死?
三、String不可变的其他好处
1、以String作为HashMap的key,String的不可变保证了hash值的不可变。
2、String作为网络连接的参数,它的不可变性提供了安全性。
3、String不可变,所以线程安全。
以上所述是小编给大家介绍的javaString不可变的好处详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。