String类:
中使用 final 关键字
·字符数组
保存字符串。所以 String 对象是不可变的。
StringBuilde
r 与 StringBuffer
都继承自 AbstractStringBuilder 类,
字符数组
保存字符串首先,我们需要明确的是String属于引用类型
,不属于8大基本数据类型
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "123";
String s1 = new String("123");
String s2 = "123";
System.out.println(s==s1);
System.out.println(s==s2);
System.out.println(s.equals(s2));
System.out.println("=================================");
StringBuffer sb = new StringBuffer("123");
StringBuffer sb1 = new StringBuffer("123");
System.out.println(sb==sb1);
System.out.println(sb.toString().equals(s));
System.out.println(sb.toString().equals(sb1.toString()));
System.out.println("=================================");
StringBuilder sbd = new StringBuilder("123");
StringBuilder sbd1 = new StringBuilder("123");
System.out.println(sbd==sbd1);
System.out.println(sbd.toString().equals(s));
System.out.println(sbd.toString().equals(sbd1.toString()));
}
输出:
false
true
true
=================================
false
true
true
=================================
false
true
true
==
对于基本类型来说是值比较
,对于引用类型来说是比较的是引用
; equals
默认情况下是引用比较
,只是很多类重写了equals方法,
String str=""
与 String str=new String("i")
为什么不相等?
答:
因为内存的分配方式不一样。
常量池
中;堆内存
中。