学习一下Java的String(转)
Posted 大连小肥云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习一下Java的String(转)相关的知识,希望对你有一定的参考价值。
JAVA 中为什么String 是immutable的?
1.设计:当创建一个String(String str2 = "abc"), 如果它(原先有一个String str = "abc")已经在pool(其实是内存中的栈)中存在,则会返回已存在String的引用,相反,怎会创建一个新的String,并返回该引用。如果String不是immutable的,改变String的一个引用将导致另一个引用的到错误的值。
2.效率:允许String缓存它的hashcode。String的hashcode在JAVA中是使用非常频繁的。例如在HashMapzhong, String设计成immutable保证了hashcode总是一样的,所以hashcode可以被缓存而不用担心改变。也就是说,不需要每次在使用hashcode时都去计算一遍,这样更高效。
3. 安全:String广泛的作为参数被JAVA中的类使用,比如 网络连接,打开的文件等等,如果String不是immutable,一个连接或文件的改变将导致严重的安全威胁,一个方法还以为正连接到一个机器上,并其实没有。可变的String同样将导致反射的安全性问题,因为反射中的参数都是String类型的。
【附】String,StringBuffer,StringBuilder
三者在执行速度方面的比较:StringBuilder > StringBuffer > String
String:字符串常量 StringBuffer:字符串变量 StringBuilder:字符串变量
从上面的名字可以看到,String是常量, 而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。再有,StringBuilder是线程非安全的,而StringBuffer是线程安全的,所以StringBuilder速度最快。
以上是关于学习一下Java的String(转)的主要内容,如果未能解决你的问题,请参考以下文章
JAVA学习 String使用equals方法和==分别比较的是什么?(转)