public class TestString {
、public static void main(String[] args) {
String str1 = "abc";
str1+="def";
String str2 = "abcdef";
String str3 = "abcdef";
String str4 = "abc"+"def";
String str5 = new String("abcdef");
System.out.println(str1==str2); //false
System.out.println(str1.equals(str2)); //true
System.out.println(str3==str2); //true
System.out.println(str3.equals(str2)); //true
System.out.println(str4==str2); //true
System.out.println(str4.equals(str2)); //true
System.out.println(str5==str2);//false 一个堆内存,一个常量池
/*
* ==比较的是变量中存放的地址,equals比较的是值。 String类型的变量 是存 放在 string常量池中的常量;
* 所以在 进行==比较的时候 是true
*
* String str1 = "abc"; str1+="def";
与
String str4 = "abc"+"def";
的不同:
"abc"+"abc"是先进行字符串连接 在string常量池中找寻到abcdef 将abcdef的地址赋值给 str4 因此它和str2
的指向的地址相同 所以 进行==比较时 为true
而, String str1 = "abc"; str1+="def"; 是通过StringBuffer来实现的,先构造一个StringBuffer
对象存放“abc” 然后调用append()方法追加 “def” ,然后再将StringBuffer对象转换成String对象
所以与str2的地址不同 故进行==比较时 为false
* */
}
}