为了账号安全,请及时绑定邮箱和手机立即绑定

我并未用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下载
官方微信