细说String StringBuffer StringBuilder

String是最基本的数据类型吗?

不是,Java基本数据类型只有8种,byte、int、char、long、float、double、boolean和short。

String、StringBuilder、StringBuffer的区别

  1. String是不可变,StringBuilderStringBuffer是可变
  • String类中使用只读字符数组保存字符串,所以是不可变的。
  • StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[]value,这两种对象都是可变的。
  1. StringStringBuffer线程安全,StringBuilder非线程安全
  • String线程安全是因为其对象是不可变的,StringBuffer线程安全是因为对方法加了同步锁或者对调用的方法加了同步锁。
  • StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
  • StringBufferd支持并发操作,线性安全的,适 合多线程中使用。
  1. StringBuilderStringBuffer在性能方面比String
  • 每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。
  • 而StringBuffer/StringBuilder性能更高,是因为每次都是对对象本身进行操作,而不是生成新的对象并改变对象引用。
  • 在单线程下,一般情况StringBuilder 相比StringBuffer 可获得10%~15% 左右的性能提升。

String、StringBuilder、StringBuffer的使用场景

  • 操作少量的数据用String;
  • 多线程操作字符串缓冲区下操作大量数据 用StringBuffer;
  • 单线程操作字符串缓冲区下操作大量数据*用StringBuilder;单线程中的性能比StringBuffer高

String对象的intern()的用途

intern()方法会首先从常量池中查找是否存在该常量值,如果常量池中不存在则现在常量池中创建,如果已经存在则直接返回.
比如

String s1="aa"; 
String s2=s1.intern(); 
System.out.print(s1==s2);//返回true

你可能感兴趣的:(Java基础)