String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1.equals(s2));
Test t1=new Test("123");
Test t2=new Test("123");
System.out.println(t1.equals(t2));
为何上面输出的是true而下面的是false,equals方法不是比较内容吗,我还以为是两个true。
String的equals和hashCode已经覆盖了Object的equals和hashCode方法,所以String在调用equals是以字符串的方式去判断相当;
而你自己定义Test没有覆盖equals和hashCode方法,则调用equals方法时,调用的是Object的equals方法,即判断对象的hashCode值是否相等
这里详细解释一下关于java中的 == 和 equals() 这两种比较方式在不同的位置的作用和用法。
1.java基本类型的比较
只能用 == 不能用equals(),== 比较对象是否相同以及对象的值是否相等。
int num1 = 1;
int num2 = 2;
int num3 = 1;
System.out.println(num1 == num3); //tr......
答案就在这里:关于java中的 == 与 equals()方法
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
java对象的相等判定,重点是equals和hashCode这两个方法。你需要自己看看。
因为String是jdk自己实现的类,它在实现的equals和hashCode这两个方法的时候,就认定了如果字符串相等,这相等。
你也同样,在Test类的实现时候,你也可以判传入的构造函数的字符串相同,则相同。具体的equals和hashCode这两个方法通常的写法我就不具体给你写了,你自己去找个样例学习下。
java源码中有这么一行:if (other instanceof String) {。意思就是,只有继承与String的才能使用执行String的比较方法,否则直接进行对象引用比较。
谢谢大家的回答,我总算知道是因为、String类重写了equals方法才是这样的,谢谢大家能回答我这个新手的小白问题。