1.equals equals()与==的区别是什么?
2.实际应用中 抽象类和接口有什么区别和联系呢?

解决方案 »

  1.   

    1.在object里equals与==没区别,,我们用时通常重写equals方法,,String类就有重写了equals方法。
    2.抽象类里有抽象方法和普通方法,,接口里全是抽象方法
      

  2.   

    1.equals是一个方法,超类Object方法而言,==和equals一样的,原代码如下:public boolean equals(Object obj) {
    return (this == obj);//证明.内部用的就是==符号
        }
    但是每个类可以重写equals方法,可满足自己的需求,就是说可以实现跟==不同的功能!2.接口是一个特殊的抽象类,就是全部的方法都为抽象的,抽象类中有抽象的方法,也有实现好的方法,就是接口和类之间的中间物,可以这么理解,设计模式方面不应该这么理解了,呵呵,考虑到很多问题
      

  3.   

    补充1#
    1,继承object的类默认都有toString()方法,有的类改写了toString()方法。导致equals和==有本质的不同。
    比如:
    Integer I = new Integer(5);
    Integer I2 = new Integer(5); System.out.println(I==I2);
    System.out.println(I.equals(I2));
    结果如何。== 个人认为是引用地址的比较。
    2,抽象类和接口也是有区别的。
      1)抽象类可以在类中声明实例字段,而接口不能拥有,但是接口指定常量却可以。
      2)声明对象时类 A a = new A(),而接口 InterfaceA a = new InterfaceA()确实错误的。
    实际中用接口比较多。楼下的,有错误请指正。smile.
      

  4.   

    equal是值的比较
    ==是引用的比较接口是一种契约,实现接口就要实现所有的方法,规定你必须做什么
    抽象类是一种可以选择的,提供你很多的方法,你可以自己决定使用什么
      

  5.   

    equal是比较值,==是比较地址~
    初学者,我的理解也是这样
      

  6.   

    如果要表示 继承,一定用类的继承。 如果为了表示一个协议、一种规范,一定用Interface
      

  7.   

    总结一下:1. equals是一个方法,超类Object方法而言,==和equals一样的,原代码如下:
       public boolean equals(Object obj) { return (this == obj);//证明.内部用的就是==符号 }
    ==是比较两个对象是否恒等,不仅比较对象的数据,也比较对象的内存地址。
    但是每个类可以重写equals方法,可满足自己的需求,就是说可以实现跟==不同的功能! 例如:String类就重写了equals()方法,使之用于比较两个字符串的数据,而非对象的内存地址!
    2.关于abstract class与interface,原理上比较复杂,可以参考下面内容:
    1) 抽象的意义
    在大型工程中,实现的技术比较复杂,模块多,代码量大,涉及编程的相关人员较多,角色和任务也不尽相同,为了合理安排软件工程的开发工作,需要一部分资深程序员先对程序框架做整体设计,然后其他程序员在建立好的框架基础上再做更细致的编程,就好比"建一座大厦要先建好钢筋混凝土框架再垒墙砖"一样,抽象类和方法就是起到"建立框架"的作用。
    类似的,接口是一个更"纯粹"的抽象类,使用接口可以很好的克服Java不支持多继承父类的限制,达到多继承的效果。
    接口和抽象类类似,只是接口更关心功能组成,而不关心功能的实现,这部分工作由继承它们的具体子类完成。
    2) 应用时如何选择抽象类或接口?
    如何选择该使用抽象类还是接口?这是一个比较有深度的问题!我们可以从两个角度考虑此问题:
    其一:从代码的使用上考虑如何选择。
    接口与抽象类的区别如下:
    Ø 接口是一种“纯粹”的抽象类,它所有的方法都是抽象的(即只有声明,没有定义);而抽象类可以允许包含有定义的方法;
    Ø 子类可以实现多个接口,但只能继承一个抽象类;
    Ø 一个子类如果实现了一个接口,那么子类必须重写这个接口里的所有方法;抽象类的子类可以不重写抽象父类的所有方法,甚至可以不重写抽象父类的抽象方法,但这个子类会自然成为抽象类。
    通过上面的对比,我们知道在代码的使用上如何选择使用抽象类还是接口。当然,需要重点提出的是:因为抽象类的子类可以不重写抽象父类的所有方法,所以有时使用抽象类代码更简练(例如后面要讲述的适配器类);而在另外一些情况下(比如要实现多继承效果),就必须要使用接口了。
    其二:从构架程序的设计思想的角度上考虑如何选择。
    抽象类的作用是实现行为,而不是定义行为,构建应用工程时如果需要定义行为,那么最好由接口来完成。比如,要创建一个程序构架,这个构架将由一些紧密相关的类构成,且所有类都会共享一个公共的行为实现,就可以使用抽象类。如果要创建将由一些不是由这些类对象必须采用的功能,就最好使用接口。
      

  8.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主截止到2008-06-19 10:05:51的汇总数据:
    注册日期:2008-5-4
    上次登录:2008-6-5
    发帖数:26
    结贴数:0
    结贴率: 0.00%
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  9.   

    String str1="abcd";String str2="efgh";if(str1==str2)比较的是两个字符串的hashcode 也就是两个字符串的内存地址值是否相同if(str1.equals(str2))比较的是两个字符串中的值是否相同(就是"abcd"是否和"efgh"相同)抽象类可以有非抽象方法,
    接口中只能定义抽象方法。用法上我也说不太清楚,免得误人子弟,我也是新手!
      

  10.   


    不同意这种观点,在Object 两者是一样的,只是看你的实现方法而已。
    任何类都继承自Object类,如果不覆盖它的equals方法,比较的永远是地址。
      

  11.   

    obj里equal和==没区别  一般子类都会写自己的equal方法  
    抽象类可以有非抽象方法,接口中只能定义抽象方法。
      

  12.   

    ‘==’是比较两边的值,不管是引用类型还是基本类型,都是比较值,这个值就是指变量名里直接存储的值,引用类型存储的是对象地址。equals的效果取决于调用这个方法的对象里equals的实现,如果没有覆写父类的equals方法,就调用父类的equals,到底会产生什么效果,到底比较什么,就要看那个方法的源代码了。
      

  13.   

    十分形象,根据对象重写后的equals方法可以知道,他比较的是两个对象的值是否相等    /**
         * 这是Integer对象中equals方法JDK的源码
         * Compares this object to the specified object.  The result is
         * <code>true</code> if and only if the argument is not
         * <code>null</code> and is an <code>Integer</code> object that
         * contains the same <code>int</code> value as this object.
         *
         * @param   obj   the object to compare with.
         * @return  <code>true</code> if the objects are the same;
         *          <code>false</code> otherwise.
         */
        public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
        }