黑马程序员技术交流社区

标题: 继承问题 [打印本页]

作者: 毕博    时间: 2012-4-24 16:45
标题: 继承问题
public class OperatorsAndExpressions {        //操作和表达

       
         
       
        void equalsMethod2(){
                String s1=new String("hello");
                String s2=new String("hello");
                System.out.println(s1==s2);               
                System.out.println(s1.equals(s2));
               
                class MyValue{                //内部类,是用户自己定义的类因此,类MyValue的equals()方法是从
                        int i;                        //Object类继承的,其功能仍然是比较两个操作数是否是同一个对象
                }
                MyValue v1=new MyValue();
                MyValue v2=new MyValue();
                v1.i=v2.i=2003;
                System.out.println(v1.equals(v2));
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();
                //一元算术运算符的运用
                OperAndExp.equalsMethod2();
        }

}
书上说这个地方类String的equals()方法已经被重写了,而类MyValue的equals()方法是从Object类继承的,这里怎么看出来类String的equals()方法已经被重写了呢?又怎么区别呢?
作者: 黑马-刘昌文    时间: 2012-4-24 16:59
在通常的情况下 equals()和==具有相同的功能!都是比较两个对象是不是指向同一个地址!但有的类 比如(String类)重写了equals方法,只要他们的类容相同,则就让他们的equals()方法就返回true;
下面这段代码可以说明:
           String s1=new String("hello");
                 String s2=new String("hello");
                 System.out.println(s1==s2);   //返回false;            
                System.out.println(s1.equals(s2)); 返回true;

作者: 胡生蒙    时间: 2012-4-24 17:01
这个你要去查API了,Object类中的equals,hashCode,toString这几个方法很多API文档中的类都重写了,你写的MyValue是自定义的类,直接重Object类中继承来了equals
作者: 胡生蒙    时间: 2012-4-24 17:02
这个你要去查API了,Object类中的equals,hashCode,toString这几个方法很多API文档中的类都重写了,你写的MyValue是自定义的类,直接重Object类中继承来了equals
作者: 胡生蒙    时间: 2012-4-24 17:02
这个你要去查API了,Object类中的equals,hashCode,toString这几个方法很多API文档中的类都重写了,你写的MyValue是自定义的类,直接重Object类中继承来了equals
作者: 马东华    时间: 2012-4-24 18:03
黑马-刘昌文 发表于 2012-4-24 16:59
在通常的情况下 equals()和==具有相同的功能!都是比较两个对象是不是指向同一个地址!但有的类 比如(St ...

如果equals与==具有相同的功能,那为什么s1==s2, 与s1.equals(s2)结果不一样呢?
作者: 林德燚    时间: 2012-4-24 18:40
1、String类已经覆写了Object类中的equals方法,String类时sun公司提供的API工具类,覆写的方法他都写好了。
2、==与equals在没覆写时就说Object中的equals就是调用“==”来判断两对象是否为同个对象;
而你所说为什么==与equals结果不相同,那是因为String覆写了equals方法,是比较字符串中每个字符是否相等,相等为true;而==是判断两个对象是否为同一个对象;
这里要注意一点,java对String类做了优化,在堆内存中有一个缓冲区,创建String对象先找缓冲区中是否有相同的对象,然后再堆内存克隆副本,所以String类中相同字符串对象hashCode一样;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2