class StringDemo {
public static void main(String[] args) {
char[] msg = {'h','e','l','l','o'};
String t1 = "hello";
String t2 = new String("hello");
String t3 = new String(msg);
String t4 = t3;
String t5 = "hello";
System.out.println(t1==t2);//false
System.out.println(t2==t3);//false
System.out.println(t3==t4);//true
System.out.println(t5==t1);//true
System.out.println(t1.equals(t1));//true
System.out.println(t1.equals(t2));//true
System.out.println(t1.equals(t3));//true
System.out.println(t1.equals(t4));//true
System.out.println(t1.equals(t5));//true
}
}
new 出來的String類型和t1這種“常亮型”聲明不同,在內存上也放在的不同的地方,在Java中String里面的=判斷,是在內存地址上是不同的,不是同一個對象,=比較的就是不是同一個對象。任何new出來的類型變量都不會“相等”。
Java中存在一個串池,
s和s1引用的是同一個字符串對象.
String s = "hello";
String s1 = "hello";
這兩句只會創建一個"hello"字符串放入串池里面,s和s1只是這個字符串的兩個引用而已.

用oop來解釋的話:
java中的==是用來判斷對象所使用的內存地址是不是同一個,進而判斷是不是同一個對象。例如 objA == objB
注意這里是同一個對象才會是true,如果不是同一個對象,哪怕兩個對象所有屬性都相同也會返回false。
而equals則是一個方法,你可以為自己的類編寫equals方法來判斷是不是相等。這里String類就提供了equals方法來判斷兩個String對象是不是相同,而不是去判斷兩個String對象是不是同一個對象,因為我們一般使用中,只關心兩個字符串內容相同與否,而不會關心是不是同一個對象。
