即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

String类 StringBuffer类 StringBuilder类

编程语言 zyfqqq 39℃ 0评论
本文目录
[隐藏]

1. String类:  

      java源码中,对string的成员变量定义,private final char value[],因此String类是不可变

String s = "ABCabc";  
System.out.println("s = " + s);  
  
s = "123456";  
System.out.println("s = " + s);  

打印结果为s = ABCabc ,s = 123456  是因为s并非对象,而是对象的引用,实际在内存中又new了一个 “123456”的字符串。

1.1.String不可变的好处? (为什么String要设计成不可变的):

1.性能  常量池的 运行  string不可变的设计出于性能考虑,当然背后的原理是string pool,当然string pool不可能使string类不可变,不可变的string更好的提高性能。    

2.安全   首要原因是安全,不仅仅体现在你的应用中,而且在JDK中,Java的类装载机制通过传递的参数(通常是类名)加载类,这些类名在类路径下,想象一下,假设String是可变的,一些人通过自定义类装载机制分分钟黑掉应用。如果没有了安全,Java不会走到今天





3线程安全    当多线程访问时,不可变对象是线程安全的,不需要什么高深的逻辑解释,如果对象不可变,线程也不能改变它。


4.String对象缓存HashCode





java中String对象的哈希码被频繁的使用,比如在HashMap的容器中。





字符串不变性保证了hash码的唯一性,因此可以放心的进行缓存,这也是一种性能优化手段,意味着不必每次都取计算新的哈希码,在String类的定义中有如下代码:





 private int hash;//用来缓存HashCode

2.StringBuffer类和StringBuilder类:

他们是可变的,
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。



转载请注明:CodingBlog » String类 StringBuffer类 StringBuilder类

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情