(3)StringBuilder与StringBuffer区别?
答:底层实现都是char数组,StringBuilder不是线程安全的,StringBuffer是线程安全的(Synchronized)。
速度:StringBuilder>StringBuffer>String(创建新对象,缓存了hash)
()String s=new String(“xyz”),创建了几个String Object?
答:两个或一个。”xyz”对应一个对象,存放在字符串常量池,”xyz”不管出现多少次,都是常量池的那一个,New String每写一次,在堆中就创建一个新的对象。如果常量池中存在”xyz”,常量池中不创建,不存在,在常量池中创建。
()String.intern()? -->可以在运行时将新的字符串加入常量池
答:如果字符串常量池中存在等于此String对象的字符串,直接返回其引用,否则,在字符串常量池中创建此String对象,并返回其引用。
()字符串为什么设计为不可变的?如何做到不可变?
答:java字符串使用非常频繁,将字符串设置为不可变的,可以允许多个客户端共享相同的字符串。底层实现的字符数组是私有的,外界无法访问。