String基础
一:
String,StringBuffer与StringBuilder的区别??
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
在大部分情况下 StringBuffer > String
在大部分情况下 StringBuilder > StringBuffer
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。
该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
二:
输出结果
String a="abc"; String b="abc"; String c=new String("abc"); String d="ab"+"c"; System.out.println(a==b ); System.out.println(a==c ); System.out.println(a==d ); System.out.println(b==c ); System.out.println(b==d ); System.out.println(c==d );
Answer
true false true false true false
三:输出结果
public static void main(String[] args){ String i5="1"; String i6="00"; String i7="100"; String i8=i5+i6; String i9="1"+"00"; String i10=i5+i6; String i11="1"; i11+="00"; System.out.println(i7==i8); System.out.println(i7==i9); System.out.println(i9==i8); System.out.println(i8==i10); System.out.println(i9==i11); }
answer
false true false false false
解析:
String d="ab"+"c"; String i9="1"+"00";对于直接相加的字符串,在编译期就进行了优化,在编译期就确定了他的值,分别被优化成 abc 100,因此在运行时,a,b,d i7 i9指向同一个对象,由于有符号引用(间接引用),在编译器不会优化,编译器确定不了值,
在运行期才确定他的值,这种方式生成的对象事实上是保存在堆上的。