亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

我并未用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;
??}
??
? }
}

正在回答

3 回答

這是因為,從Course的構造方法中可以看出,這里比較的兩個name都是字符串常量,它們在內存中都保存在了常量池中,而如果兩個字符串常量相同,它們在常量池中只有一份的拷貝,所以用==比較地址的時候,它們也是相等的。如果想要使結果為false,可以將Course的構造方法中,this.name = name,修改為this.name = new String(name).這是因為通過new String()創建的字符串被當做對象放在了堆內存中,在堆內存中就算是兩個相同的字符串也是有兩個拷貝,因此就會返回false

0 回復 有任何疑惑可以回復我~

這里有一篇我轉的文章,希望對你有幫助?http://www.cnblogs.com/langren1992/p/4467270.html

1 回復 有任何疑惑可以回復我~

比較值的時候用equals ?,比較址的時候用==

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

我并未用if(this.name.equals(course.name)),而是使用if(this.name==course.name),運行結果一樣,課堂中要我們思考的,為何不用==,而用equals,本人未思考出來,求解答什么時候用==,什么時候用equals

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號