package pak1;public class Class1
{
public static void main (String[] args)
{
String str="aaa";
StringBuffer ss=new StringBuffer(str);
StringBuffer s=new StringBuffer("aaa");
String ss1=ss.toString();
String s1=s.toString();
System.out.println("1: "+ss.equals(s));
System.out.println("2: "+ss1.equals(s1));
}
}
{
public static void main (String[] args)
{
String str="aaa";
StringBuffer ss=new StringBuffer(str);
StringBuffer s=new StringBuffer("aaa");
String ss1=ss.toString();
String s1=s.toString();
System.out.println("1: "+ss.equals(s));
System.out.println("2: "+ss1.equals(s1));
}
}
2: true
:-)
public static void main(String[] args) {
// String str="aaa";
StringBuffer ss = new StringBuffer("aaa");
StringBuffer s = new StringBuffer("aaa"); String ss1 = ss.toString();
String s1 = s.toString(); System.out.println("1: " + ss.equals(s));
System.out.println("2: " + ss1.equals(s1));
}
}
而String比较的是两者所包含的字符串public boolean equals(Object obj) {//来自于StringBuffer
return (this == obj);
} public boolean equals(Object anObject) {//来自于String
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
StringBuffer s=new StringBuffer("aaa");在內存中這樣的ss------------------ >"aaa"
s -------------------> "aaa"
這裡 生成2各對象 所以是false而String 是不一樣的 在 生成String 時,內存中會有 一個 字符池,當字符池中已經有一個已經存在的對象時,jvm是不會再生成另\外 一個String 的,而是 把地址給過去String str="aaa";
String s="aaa";在內存中其實是 這樣的str ------------------ >"aaa" <-------------------------- s