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指向同一个对象,由于有符号引用(间接引用),在编译器不会优化,编译器确定不了值,
在运行期才确定他的值,这种方式生成的对象事实上是保存在堆上的。
上一篇:通过全备+binlog_server同步恢复被drop的库或表


下一篇:leetcode:Reverse Nodes in k-Group(以k为循环节反转链表)【面试算法题】