JAVA中字符串的比較
代碼中:
String str1="hello";
String str2="imooc";
System.out.println("str1等于str2:" + (str1==str2));
是可以輸出結果:str1等于str2:false
C中比較字符串一般會調用函數strcmp();,百度了JAVA中一般也會調用equals()方法,提及到字符串是對象類型和方法,不細究??吹胶竺嬖倩仡^來自我解答。
而代碼中==運行成功,是可以這樣比較還是IDE將就著執行成功了,回頭自我解答。
2015-12-09
可以這樣比較,但字符串比較用==表示的是地址的比較,指向同一對象才返回true,而equals是比較內容的
2015-12-09
==和equals區別 (1)== ?第一,指的是基本數據類型的數值大小的比較?例如:int?a=3,b=3;則a==b; ?第二,指的是比較對象引用(new出來對象或者是已經存在對象的首地址)是否相等?例如: ????String?a?=?"hello"; ????String?b?=?"world"; ????a指向的是內存存放字符串“hello”的首地址,b指向的是內存存放字符串“world”的首地址。因為這兩個??字符串對象不同,故首地址不同。故a==b為false。 (2)equals ?它的本意是指兩對象引用是否相等,但是String類重寫了它的equals方法(源碼里有) ?1.if(object==this)?return?true; ?2.if(object?instanceof?String)?比較兩個字符串字符是否相等,相同返回true,不相同返回false ?例如?String?a?=?"nice"; ?????String?b?=?"nice"; ?????String?c?=?new?String("nice"); ?????String?d?=?new?String("nice"); ?????表達式?a==b?a和b指的是“nice”同一對象,故地址即引用相等。故為true ?????表達式?a==c?c是重新new出來的對象?故a和c指的是不同的對象?故為false ?????表達式?a.equals(b)?將a,b帶入equals方法。上面已經得出a==b為false?故不執行第一個if條件 ?????轉而進行第二個條件比較字符串的字符。都是“nice",故為true ?????表達式?a.equals(c)?同理也是比較字符串的字符都是‘nice’,故為true2015-12-09
代碼
public class helloworld{
?? ?public static void main(String[] args){?? ??? ?
?? ??? ?String str1= new String("hello");
?? ??? ?String str2= new String("hello");
?? ??? ?System.out.println(str1==str2);
?? ??? ?String str3="hello";
?? ??? ?String str4="hello";
?? ??? ?System.out.println(str3==str4);
?? ?}
}
結果:false
????????? true
大概能意會==對于地址的比較了。
但如果直接定義str而不是用new,不同的字符串地址竟然是一樣的。對于new的用法還是要回頭來看。
2015-12-09
String str1= new String("hello");
String str2= new String("hello");
用== 和 equals 分別試試就知道了
2015-12-09
樓上正解
2015-12-09
有這樣的精神很好,有問題后面大家可以一起討論