我并未用if(this.name.equals(course.name)),而是使用if(this.name==course.name),運行結果一樣,課堂中要我們思考的,為何不用==,而用equals,本人未思考出來,求解答什么時候用==,什么時候用equals
package com.zhou.jihe;
public class Course {
?public String id;
?public String name;
?public Course(String id,String name)
?{
??this.id=id;
??this.name=name;
?}
?public Course(){}
? public boolean equals(Object obj)
? {
?? if(this==obj)
?? {
???return true;
?? }
?? if(obj==null)
?? {
??? return false;
?? }
?? if(!(obj instanceof Course))
?? {
??? return false;
???
?? }
??Course cr=(Course)obj;
??if(this.name==null)
???{if(cr.name==null)
???{
????return true;
???}
???else
???{
????return false;
???}???
???}
??if(this.name==cr.name)
??{
???return true;
??}
??else{
???return false;
??}
??
? }
}
2015-08-01
這是因為,從Course的構造方法中可以看出,這里比較的兩個name都是字符串常量,它們在內存中都保存在了常量池中,而如果兩個字符串常量相同,它們在常量池中只有一份的拷貝,所以用==比較地址的時候,它們也是相等的。如果想要使結果為false,可以將Course的構造方法中,this.name = name,修改為this.name = new String(name).這是因為通過new String()創建的字符串被當做對象放在了堆內存中,在堆內存中就算是兩個相同的字符串也是有兩個拷貝,因此就會返回false
2015-08-01
這里有一篇我轉的文章,希望對你有幫助?http://www.cnblogs.com/langren1992/p/4467270.html
2015-07-13
比較值的時候用equals ?,比較址的時候用==