小弟今天看了很多还有关于比较(equals)的视频和书 小弟不才 不太明白 求高手能指点一二 具体点怎么的用 谢谢 小弟新人 问题比较浅 求高手信心点 谢谢

解决方案 »

  1.   

    equals要实现值等效语义。
    作为有效的equals实现,必须具有自反性、传递性和对称性。
      

  2.   

    public boolean equals(Object obj)指示某个其他对象是否与此对象“相等”。 
    equals 方法在非空对象引用上实现相等关系: 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 
    对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 
    传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 
    一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。 
    对于任何非空引用值 x,x.equals(null) 都应返回 false。 
    Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
      

  3.   

    你这个事API的解释啊 我看过了 就是有点不理解 能给我解释下么
      

  4.   

    我是今天刚学到的这个,现来试验下,楼主不妨敲下以下代码,编译并执行下看效果。然后将if(str3.equals(str2))换成if(str3==str2)试试。
    不对之处,望各位大侠指正。class Test {
    public static void main(String[] args) {
    String str1 = new String("abc");
    String str2 = new String("abc");
    String str3 = str1;
    if(str3.equals(str2))
    System.out.println("true");
    else
    System.out.println("flase");}
    }
      

  5.   

    你应该new两个Object来比较,String已经重写了equals方法,极易造成你对equals的误解
      

  6.   

    几点:
    一、也是极易混淆的一点,equals和==是相同的,都是比较地址,只有重写equals方法比较内容它才会比较内容。二、重写eqauls方法要遵守几个协定,就是API中描述的自反那些。三、重写equals方法最好重写hashCode,否则,在HashMap,HashSet等中存储自定义对象时会出现令你摸不着头脑的错误
      

  7.   


    你好!刚学习这个,不明白您所说的,还望指点下。我将String替换成Object后编译报错。
      

  8.   

    class Test {
    public static void main(String[] args) {
    Object str1 = new Object();
    Object str2 = new Object();
    Object str3 = str1;
    if(str3.equals(str2))
    System.out.println("true");
    else
    System.out.println("flase");}
    }
      

  9.   


    再次感谢!我是今天看视频学到的,依葫芦画的瓢,不知其所以然,现在还不明白String的含义及作用,以后要学习。
    我按您给的代码编译执行结果与用==的一样。
    用String已重写了equals方法?如用Object执行结果都会与用==一样,对吗?
      

  10.   

    equals主要是运用于比较字符串的内容是否一样,在比较对象时不能用此方法
      

  11.   

    可以从内存解析的角度来尝试分辨和==的区别。两个不同的对象引用指向同一个值时,equals返回false
      

  12.   

    ==    比较内存位置,
    equals比较之间的值;
      

  13.   

    equals主要是运用于比较字符串的内容是否一样,但是在Stringbuffer里不是这样
      

  14.   

    EQUALS 比较的是什么值 但是我发现书上比较不全是值 好似也有位置 一种特殊情况 
      

  15.   


    对于要比较的对象,需要重写equals方法
      

  16.   

    你按住ctrl 在点左键 点 你那个对象的equals()方法查看源代码!  一目了然!!!