关于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? 展开
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? 展开
1个回答
展开全部
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条;否则请参考第一条
(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条;否则请参考第一条
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询