Java⾯试题—字符串
  如果明天你要参加⼀场⾯试,⾯试官有个题⽬是:说说String/StringBuffer/StringBuilder它们之间的区别?你会怎么回答呢?(脑补⼀下答案)今天,⼩编就来和⼤家详细聊聊字符串String/StringBuffer/StringBuilder,告诉你怎样完美的回答以上⾯试官的问题,希望对你有帮助。
考点分析
这个题⽬也是考查字符串相关的。对于这个题⽬,我们通过阅读源码来验证我们的答案。
上图主要显⽰String/StringBuilder/StringBuffer的UML结构。
为什么要引⼊其它两种字符串处理类?
  说⽩了就是提⾼字符串连接效率。在⼤部分情况下,字符串的拼接速度为:StringBuilder>StringBuffer>String。
  String是不可变的,因此每次对其操作改变其变量值,其实是⽣成⼀个新的对象,然后将变量引⽤指向新对象;因此速度慢。
  StringBuffer则不同,对其操作即直接操作对象指向的引⽤,⽆需产⽣新对象,速度很快;它是线程安全的,在维护多线程的同步等也会消耗⼀点性能。
  StringBuilder是jdk5之后新增的,其⽤法与StringBuffer完全⼀致,但它是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。
是否线程安全?
  String 字符串常量(线程安全)。StringBuffer 字符串变量(线程安全)。StringBuilder 字符串变量(⾮线程安全)。
  String 是不可变的,StringBuffer/StringBuilder 是可变的;String/StringBuffer是线程安全的,StringBuilder是⾮线程安全的。
这⾥引⼊来⼀个新的问题,了解String.intern()⽅法吗?
  String.intern()查常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引⽤,如果没有,则在常量池中增加⼀个Unicode等于str的字符串并返回它的引⽤。因此在⽤String进⾏字符串拼接时,会产⽣很多临时变量。建议多使⽤StringBuffer/StringBuilder。
java中字符串转数组存放在什么地⽅?
  String是存放在常量池,在编译期已经被确定了。new String()不是字符串常量,它有⾃⼰的地址空间,存放在堆空间。⽽其它两个都存放在堆空间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。