文章目录
关于String类的面试题!
String
类可以继承吗?
不行。String
类使用 final
修饰,无法被继承。
String
和StringBuilder
、StringBuffer
的区别?
String:String
的值被创建后不能修改,任何对 String
的修改都会引发新的 String
对象的生成。
StringBuffer
:跟 String
类似,但是值可以被修改,使用 synchronized
来保证线程安全。
StringBuilder:StringBuffer
的非线程安全版本,没有使用 synchronized
。在单线程中效率比StringBuffer
具有更高的性能,推荐优先使用。
String s = new String("xyz");
创建了几个字符串对象?
如果字符串常量池已经有“xyz”,则是一个;否则会创建两个字符串对象。
当字符创常量池没有 “xyz”,此时会创建如下两个对象:
一个是字符串字面量 “xyz” 所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,此时该实例也是在堆中,字符串常量池
只放引用。
另一个是通过 new String() 创建并初始化的,内容与"xyz"相同的实例,也是在堆中。
String s = "xyz"
和 String s = new String("xyz")
区别?
两个语句都会先去字符串常量池中检查是否已经存在 “xyz”,如果有则直接使用,如果没有则会在常量池中创建 “xyz” 对象。
另外,String s = new String(“xyz”) 还会通过 new String() 在堆里创建一个内容与 “xyz” 相同的对象实例。
所以前者其实理解为被后者的所包含。
参考博客:
Java 基础高频面试题(2021年最新版)_程序员囧辉-CSDN博客_java面试题