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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 悟佛修道 高级黑马   /  2013-5-22 23:56  /  1489 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 悟佛修道 于 2013-5-23 12:07 编辑
  1. public static void method()
  2. {
  3. Integer x = new Integer("123");

  4. Integer y = new Integer(123);

  5. sop("x==y:"+(x==y));//结果为假
  6. sop("x.equals(y):"+x.equals(y));//结果为真,这里毕老师的解释是说比较的是两个对象的数值 所以相等。不是一个是字符串"123"一个是整数123,这个数值怎么又相同了啊??不解
  7. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
public static void method()
{
Integer x = new Integer("123");    ///封装的都是Integer类型的对象,都会转变成Integer类型数据。

Integer y = new Integer(123);

sop("x==y:"+(x==y));//结果为假
sop("x.equals(y):"+x.equals(y));//结果为真,这里毕老师的解释是说比较的是两个对象的数值 所以相等。不是一个是字符串"123"一个是整数123,这个数值怎么又相同了啊??不解
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
public static void method()
{
Integer x = new Integer("123");    ///封装的都是Integer类型的对象,都会转变成Integer类型数据。

Integer y = new Integer(123);  //我加一句,使用了new 会在内存栈开不同地址空间给x与y,==比较的是内存地址,false;楼主可以去掉new再验证下结果

sop("x==y:"+(x==y));//结果为假
sop("x.equals(y):"+x.equals(y));//结果为真,这里毕老师的解释是说比较的是两个对象的数值 所以相等。不是一个是字符串"123"一个是整数123,这个数值怎么又相同了啊??不解
}
回复 使用道具 举报
public static void method()
{
Integer x = new Integer("123");

Integer y = new Integer(123);

sop("x==y:"+(x==y));//因为X和Y是两个不同的对象,所以内存地址不同,==比较的内存地址,所以不同
sop("x.equals(y):"+x.equals(y));//楼主可能对Integer的构造方法不知道?new Integer("123")这个构造方法中的“123”,构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值,所以其实值还是和new Integer(123)一样都是123,而Integer中覆写了equals方法,比较的就是Integer的值,所以123==123.
}
回复 使用道具 举报
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));//结果为真,这里毕老师的解释是说比较的是两个对象的数值 所以相等。不是一个是字符串"123"一个是整数123,这个数值怎么又相同了啊??不解
}

1Integer 类型的对象包含一个 int类型的字段size,用来存放其int值。new Integer("123”)将"123"转成123,赋给size。
而new Integer(123),由于123就是int类型,就直接将其赋给size了。故x.size==y.size
2"=="直接比较地址值,
①基本类型,存于栈中,当其值相等会共享内存(即存在一个空间,地址一样),故123==123 true
②引用类型,存于堆中,==比较的是地址,不同的对象,地址就不会一样,x==y false

3、x.equals(y),这个方法,实则是int a=x.size;int b=y.size;   a==b,自然true了。最终比较的是123和123的地址是否一样。
回复 使用道具 举报
谢谢各位的回答,明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马