1 String 是不可变的,重新赋值则重新分配new string
例如: 这是两个string,s是引用,指向不同的内存
String s = "ABCabc";
System.out.println("s = " + s); // s = ABCabc
s = "123456";
System.out.println("s = " + s); // s = 123456
2 string 在常量区可以share
String a = "123";
String b = "123";
system.out.println(a==b) //true
3 字符串连接符“+”
就是StringBuilder
String str2 = "ab"; //1个对象
String str3 = "cd"; //1个对象
String str4 = str2+str3;
即等于new StringBuilder("ab".append("cd"));
4 对于在循环中要进行字符串连接的应用,一般都是用StringBulider对象来进行append操作。
public class Test {
public static void main(String args[]) {
String s = null;
for(int i = 0; i < 100; i++) {
// s = (new StringBuilder(String.valueOf(s))).append("a").toString();
s += "a";
}
}
}
5 string ,stringbuilder 区别;
String s1=new String("123"); String每次赋值allocate新空间,所以指向不同string,会造成多个空间浪费。
stringbuilder不allocate new space;用同一个stringbuffer. insert, append the string.
stringbuilder 线程不安全;100%用
stringbuffer 线程安全;已经变成历史api,不再使用;
c++ 的stringbuilder/stringbuffer是什么呢?
就是string.c++ string是可变的。类似java的stringbuilder.java string不是不可变的.
6 java中String的常用方法
length,charAt,getChars,getBytes,toCharArray,equals()和== ,compareTo,indexOf,substring,concat,replace,trim,valueOf,toLowerCase/toUpperCase,substring,replace,delete,reverse,insert,append,getChars,charAt,setLength
http://archer-zhou.iteye.com/blog/443864
notes:下面blog是对string的深入解析,包括源码解析和反编译,完全没有必要。
https://blog.csdn.net/justloveyou_/article/details/52556427