黑马程序员技术交流社区

标题: 一个小问题 [打印本页]

作者: 张宁    时间: 2013-3-29 13:11
标题: 一个小问题
public static void method()
{
    Integer x = new Integer("123");

    Integer y = new Integer(123);

    sop("x==y:"+(x==y));
    sop("x.equals(y):"+x.equals(y));
}

结果我知道,谁给我讲一下这里的区别。


作者: 桉树    时间: 2013-3-29 13:17
sop("x==y:"+(x==y));  "==" 是Object 中的方法,比较的是两个对象的地址。
sop("x.equals(y):"+x.equals(y)); 这里 equals 方法是 Integer 对象类 中重写了Object  类中的 equals 中的方法:比较的是对象的内容。
希望我的回答能给你点帮助。{:soso_e128:}
作者: 邵震    时间: 2013-3-29 13:20
技术分3的给技术分30的回答问题。。。。

是我疯了 还是世界疯了  难道楼上是版主小号?
作者: HM李超    时间: 2013-3-29 17:14
首先看一下jdk api文档,Integer包装类的两个构造函数:
Integer(int value) :构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s) :构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。

构造函数差别不是很大,不管传入的是int类型还是String类型,都会包装成Integer类型,用的时候可以parseInt也可以toString;
在看看两句输出语句:1,==是运算符,在对象上使用时表示比较的是两个对象的地址是否一样?由于x,y都new了对象,所以地址不一样,返回false;
                              2,equals,这个是Object类的方法,但是Integer类把Object类的equals方法覆盖了,形式是:
boolean equals(Object obj) :比较此对象与指定对象。就是比较两个对象保存的内容是否相同,x.equals(y),应该返回true;
不知道对不对啊,我没运行你的代码,结果是根据我已有的知识作为回答的,这里我建议你遇到问题时,首先想到的应该是查阅JDK API文档,我认为这是学Java最好的资料了,呵呵呵
作者: HM朱蛟    时间: 2013-3-30 01:17
本帖最后由 HM朱蛟 于 2013-3-30 01:23 编辑

很简单 一句话讲清楚

sop("x==y:"+(x==y));  比较的是2个对象的引用,也就是地址,地址不同,当然为假
sop("x.equals(y):"+x.equals(y));  Integer对象复写了equls方法,比较的是数值,所以记住,数据包装类里的equals和以前学习的Object里的equls是2码事


QQ截图20130330012222.png (6.16 KB, 下载次数: 21)

QQ截图20130330012222.png





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