A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毕博 中级黑马   /  2012-4-24 16:45  /  2178 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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()方法已经被重写了呢?又怎么区别呢?

6 个回复

倒序浏览
在通常的情况下 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;
回复 使用道具 举报
这个你要去查API了,Object类中的equals,hashCode,toString这几个方法很多API文档中的类都重写了,你写的MyValue是自定义的类,直接重Object类中继承来了equals
回复 使用道具 举报
这个你要去查API了,Object类中的equals,hashCode,toString这几个方法很多API文档中的类都重写了,你写的MyValue是自定义的类,直接重Object类中继承来了equals
回复 使用道具 举报
这个你要去查API了,Object类中的equals,hashCode,toString这几个方法很多API文档中的类都重写了,你写的MyValue是自定义的类,直接重Object类中继承来了equals
回复 使用道具 举报
黑马-刘昌文 发表于 2012-4-24 16:59
在通常的情况下 equals()和==具有相同的功能!都是比较两个对象是不是指向同一个地址!但有的类 比如(St ...

如果equals与==具有相同的功能,那为什么s1==s2, 与s1.equals(s2)结果不一样呢?
回复 使用道具 举报
1、String类已经覆写了Object类中的equals方法,String类时sun公司提供的API工具类,覆写的方法他都写好了。
2、==与equals在没覆写时就说Object中的equals就是调用“==”来判断两对象是否为同个对象;
而你所说为什么==与equals结果不相同,那是因为String覆写了equals方法,是比较字符串中每个字符是否相等,相等为true;而==是判断两个对象是否为同一个对象;
这里要注意一点,java对String类做了优化,在堆内存中有一个缓冲区,创建String对象先找缓冲区中是否有相同的对象,然后再堆内存克隆副本,所以String类中相同字符串对象hashCode一样;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马