Java对象之间的比较之equals和==

来源:互联网 发布:2016年度网络十大歌曲 编辑:程序博客网 时间:2024/05/18 03:14
/** *  */package string;/** * @author Administrator * “==” 比较引用,即判断是否指向同一个对象 * “equals()” 默认是比较引用,包装类重写了这些方法,比较对象内容,我们自己的类一般也重写equals方法 * * equals方法属于Object类,默认的是比较两个对象引用是否相等,即是否指向同一个对象 * 和使用==号来比较的结果是一样的。 *  * 对于String,Integer等包装类型来说,他们已经重写了Object的equals方法,根据内容判断是否相等。 *  * 所以一般来说,对于自己实现的类,要想在某些情况下比较返回true,必须重写equals方法。 * 某些情况下,重写equals方法最好吧hasCode()也重写了,比如要存入Map/Set的时候。 *///没有重写equals的对象class CompareObject1{int v;public CompareObject1(int v){this.v = v;}}//重写equals的对象class CompareObject2{int v;public CompareObject2(int v){this.v = v;}public boolean equals(Object o){CompareObject2 c = (CompareObject2)o;return this.v == c.v? true:false;}}public class EqualsTest {/** * @param args */public static void main(String[] args) {//普通对象比较CompareObject1 c1 = new CompareObject1(1);CompareObject1 c2 = new CompareObject1(1);System.out.println(c1 == c2); //引用不同System.out.println(c1.equals(c2)); //引用不同//String比较String s1 = new String("hello");String s2 = new String("hello");System.out.println(s1 == s2);//引用不同System.out.println(s1.equals(s2));//里面的值相同,重写过equals方法//Integer比较Integer int1 = new Integer(1);Integer int2 = new Integer(1);System.out.println(int1 == int2);//引用不同System.out.println(int1.equals(int2));//里面的值相同,重写过equals方法//重写了equals方法的普通对象的比较CompareObject2 o1 = new CompareObject2(1);CompareObject2 o2 = new CompareObject2(1);System.out.println(o1 == o2); //引用不同System.out.println(o1.equals(o2)); //里面的值相同,重写过equals方法}}/** * Output:falsefalsefalsetruefalsetruefalsetrue * */

原创粉丝点击