为什么Java要把字符串设计成不可变的-Java开发Java经验技巧.doc:..为什么Java要把字符串设计成不可变的-编程开发技术为什么Java要把字符串设计成不可变原文出处:Hollis(***@Hollis_Chuang)String是Java屮一个不可变的类,所以他一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。不可变类有很多优势。本文总结了为什么字符串被设计成不可变的。将涉及到内存、同步和数据结构相关的知识。字符串池字符串池是方法区中的一部分特殊存储。当一个字符串被被创建的时候,首先会去这个字符串池屮查找,如果找到,直接返回对该字符串的引用。下面的代码只会在堆中创建一个字符串Stringstringl="abed";Stringstring2=〃abcd〃;F面是图水:如果字符串可变的话,当两个引用指向指向同一个字符串时,对其中一个做修改就会影响另外一个。(请记住该影响,有助于理解后面的内容)缓存HashcodeJava中经常会用到字符串的哈希码(hashcodc)□例如,在IlashMap中,字符串的不可变能保证其hashcode永远保持一致,这样就可以避免一些不必要的麻烦。这也就意味着每次在使用一个字符串的hashcode的时候不用重新计算一次,这样更加高效。在String类中,有以下代码:privateinthash;//,因为String类不可变,所以一旦对象被创建,该hash值也无法改变。所以,每次想要使用该对象的hashcode的吋候,直接返回即口J。使其他类的使用更加便利在介绍这个内容之前,先看以下代码:HashSet<String>set二newHashSet<String>();(newString(〃a〃));(newString(〃b〃));(newString(〃c〃));for(Stringa:set)=a;在上而的例子小,如果字符串可以被改变,那么以上用法将有可能违反Set的设计原则,因为Set要求其屮的元索不可以重复。上面的代码只是为了简单说明该问题,其实String类
为什么Java要把字符串设计成不可变的-Java开发Java经验技巧 来自淘豆网m.daumloan.com转载请标明出处.