String类: 中使用 final 关键字 ·字符数组保存字符串。所以 String 对象是不可变的。
StringBuilder 与 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") 为什么不相等?
答:因为内存的分配方式不一样。
常量池中;堆内存中。