字符串面试篇 - 京东面试题

String、StringBuffer 与 StringBuilder 区别?

String内容不可变,StringBuffer和StringBuilder内容可变;

StringBuilder非线程安全(单线程使用),String与StringBuffer线程安全(多线程使用);

如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。



String为什么不可变?

public final class String
implements java.io.Serializable, Comparable<string>, CharSequence {
/** The value is used for character storage. */
private final char value[];

/** Cache the hash code for the string */
private int hash; // Default to 0</string>

String 的底层实现是依靠 char[] 数组,既然依靠的是基础类型变量,那么他一定是可变的, String 之所以不可变,是因为 Java 的开发者通过技术实现,隔绝了使用者对 String 的底层数据的操作。

String,是否可以继承,“+”怎样实现?

String不可以继承,因为String被final修饰,而final修饰的类是不能被继承的。
String为不可变的,每次String对象做累加时都会创建StringBuilder对象。
// 程序编译期即加载完成对象s1为"ab"
String s1 = "a" + "b";  
// 这种方式,JVM会先创建一个StringBuilder,然后通过其append方法完成累加操作
String s1 = "a";
String s2 = "b"; 
String s3 = s1 + s2; // 等效于 String s3 = (new StringBuilder(s1)).append(s2).toString();


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。