[软件构造] Java中的字符串
Java中的字符串主要分为三类:String,StringBuilder,StringBuffer
String在底层是用char数组来实现的,是一个不可变类,每次创建或者链接时都是新分配一个。
而StringBuilder和StringBuffer都是继承自AbstractStringBuilder类,是可变类,也是通过char数组实现的。
由于不可变类和可变类的区别,StringBuilder在效率上要比String快很多倍。
同时,String 类有一个对应的 String 池,也就是 String pool。每一个内容相同的字符串对象都对应于一个 pool 里的对象。String s = "xxx" 这种形式,如果缓存池中没有,则在缓存池和堆里分别创建一个,然后让s指向缓冲池中的那个。如果有,就让它指向缓存池中的那个,不在堆中新建对象。String s = new String("xxx")这种形式,一定会在堆中新建一个,如果缓存池中没有,就在缓冲池里创建一个,但是指向的仍然是堆中那个。同样的,在+连接时也是在缓冲池里找。