String
1、String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。在早期的JVM实现版本中,被final修饰的方法会被转为内嵌调用以提升执行效率。而从Java SE5/6开始,就渐渐摈弃这种方式了。因此在现在的Java SE版本中,不需要考虑用final去提升方法调用效率。只有在确定不想让该方法被覆盖时,才将方法设置为final。
2、String保存字符串在字符数组中
3、String s=“sssssssss”;字符串主要运行在方法区的运行时常量池
4、String s1=new String(“sssssssss”);字符串主要存放于堆中
StringBuffer和StringBuilder
通过代码对比:
String
public class Main {
public static void main(String[] args) {
String string = "";
for(int i=0;i<10000;i++){
string += "hello";
}
}
}
每执行一次循环,就会新建一个空间存放String中的内容
StringBuffer和StringBuilder
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<10000;i++){
stringBuilder.append("hello");
}
}
}
StringBuilder每执行一次for循环,new的对象只有一个,地址不会改变。
StringBuffer是线程安全的(synchronized)。