黑马程序员技术交流社区
标题:
继承问题
[打印本页]
作者:
毕博
时间:
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