String中equals與==的差異?

  1. equals

比較物件裡的值(屬性)是否相同。

  1. ==

比較物件(實體、記憶體空間)是否相同。


舉例 :

String s1 = new String("restful") ;
String s2 = new String("restful") ;
String s3 = new String("peaceful") ;
String s4 = s1 ;
String s5= "restful" ;
String s6= "restful" ;

System.out.println(s1.equals(s2)) ;
System.out.println(s1.equals(s3)) ;
System.out.println(s1 == s2) ;
System.out.println(s1 == s4) ;
System.out.println(s1 == s5) ;
System.out.println(s5 == s6) ;


  • s1.equals(s2)

s1和s2所帶的值相同。 true

  • s1.equals(s3)

s1和s3所帶的值不相同。 false

  • s1 == s2

s1和s2各new了不同的記憶體空間。 false

  • s1 == s4

因為把s4指向了和s1所指向的同一個空間。 true

  • s1 == s5

因為s1 new了一個新空間,而s5則在字串池中。 false

  • s5 == s6

s5和s6都在字串池中,為了節省記憶體空間,在字串池中,只要值相同,都會指向同一個記憶體空間。 true