黑马程序员技术交流社区
标题:
Equals()方法的问题,请告诉我为什么
[打印本页]
作者:
747437484
时间:
2013-12-15 09:54
标题:
Equals()方法的问题,请告诉我为什么
public class TestEqual {
public static void main(String[] args){
String s3 = new String("hello");
String s4 = new String("hello");
TestEqual d1 = new TestEqual();
TestEqual d2 = new TestEqual();
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
System.out.println(d1==d2);
System.out.println(d1.equals(d2));
}
}
作者:
一年之后
时间:
2013-12-15 10:18
结果是 false 对象不同。 地址值不同
true 对象中内容相同,
false 对象不同 地址值不同
false 对象不同 地址值不同。
==:可以比较基本数据类型, 和引用数据类型。当用于基本数据类型的时候,比较值是否相等,当用于引用数据类型的时候,判断对象是否相同,也就是地址值是否相同。
equals:只比较对象中的内容,相同返回true,不相同返回false,当比较的是非字符串变量时,比较的是对象是否相同。跟== 一样
作者:
月生春
时间:
2013-12-15 10:33
结果是false,true,false,false。对于字符串,在内存中一旦存在,就不会改变,只能改变他的引用。s3和s4分别指向了他们在内存中的位置也就地址值。对象不同,地址是就不同。而字符串中的equals方法比较的是字符串内容,内容一样,所以为true。不知道TextEqusl 这两个对象你怎么去写的,但是可以同样去解释。只是个人认为,仅为参考。
作者:
城市儒侠
时间:
2013-12-15 11:14
public class TestEqual {
public static void main(String[] args){
String s3 = new String("hello");
String s4 = new String("hello");
TestEqual d1 = new TestEqual();
TestEqual d2 = new TestEqual();
System.out.println(s3==s4);//false 两个引用类型,比较的是内存地址,所以不可能一样。
System.out.println(s3.equals(s4));//true String类重写了equals方法,这个时候比较的就是值了,所以返回true
System.out.println(d1==d2);//false 同理这个比较的也是两个内存地址,他们是不一样的。
System.out.println(d1.equals(d2));//false 按照你现在的代码返回是//false, 如果你想返回true,你可以在TestEqual 里面重写equals方法。
}
}
作者:
公子-醉香
时间:
2013-12-15 12:08
本帖最后由 公子-醉香 于 2013-12-15 12:09 编辑
001.PNG
(60.11 KB, 下载次数: 17)
下载附件
2013-12-15 12:09 上传
作者:
Diaraelo
时间:
2013-12-15 13:29
public class T1 {
public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException{
// TODO Auto-generated method stub
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1);//输出abc
System.out.println(s2);//输出abc
System.out.println(s1.equals(s2)); //判断其内容相同都是abc返回true
System.out.println(s1.getClass()==s2.getClass());//都是String 类的字节码对象所以返回true
System.out.println(s1==s2); //2个不同对象地址值不同返回flase
}
}
复制代码
用了一个String类来说明,可以看出equals是判断内容是否相同
==是判断对象地址是否相同(即指向对象是否相同)
getClass()是类字节码对象,所以是比较类是否相同。
大概比较容易混乱的就上面3个情况了吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2