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指向同一个对象,由于有符号引用(间接引用),在编译器不会优化,编译器确定不了值,
在运行期才确定他的值,这种方式生成的对象事实上是保存在堆上的。
原文地址:https://www.cnblogs.com/qwer113/p/9306807.html