关于Java中equals()方法的使用。为什么比较内容相同的对象依然只是false?

publicclassCourse{publicStringid;publicStringname;//构造器publicCourse(Stringid,Stringna... public class Course {
public String id;
public String name;

//构造器
public Course(String id,String name){
this.id = id; this.name = name; }

public static void main(String [] args){
Course c1 = new Course("1","高数");
Course c2 = new Course(c1.id,c1.name);
System.out.println(c2.equals(c1));
}
}

最后得出是false? 两个对象指向相同地址的字符串,为什么还会是false?
展开
 我来答
DejaVu乐桃桃kf
2016-05-08
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
java中,
(1)对于字符串变量来说,equal比较的两边对象的内容,所以内容相同返回的是true。
至于你没问到的“==”,比较的是内存中的首地址,所以如果不是同一个对象,“==”不会返回true 而是false。
举个简单的例子,
String s1="abc", s2="abc";
String s3 =new String("abc");
String s4=new String("abc");
s1==s2 //true,
s1.equals(s2) //true,
s3.equals(s3) //true,equal比较的是内容
s3==s4//false,==比较的是首地址,所以是false
(2)对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象,

Sample sa1 = new Sample();
Sample sa2 = new Sample();
sa1.equals(sa2) //false,因为不是同一对象
注意,如果加上
sa1=sa2;
那么
sa1.equals(sa2) //true

针对你问的,如果你说的两个对象是非字符串的,那么参考第2条;否则请参考第一条
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式