黑马程序员技术交流社区

标题: 字符串对象比较的疑惑? [打印本页]

作者: 悟佛修道    时间: 2013-5-22 23:56
标题: 字符串对象比较的疑惑?
本帖最后由 悟佛修道 于 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. }
复制代码

作者: 刘学明       时间: 2013-5-23 00:07
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,这个数值怎么又相同了啊??不解
}


作者: 武志红    时间: 2013-5-23 10:05
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,这个数值怎么又相同了啊??不解
}

作者: 陈潜    时间: 2013-5-23 10:21
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.
}
作者: 张世威    时间: 2013-5-23 10:54
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的地址是否一样。

作者: 悟佛修道    时间: 2013-5-23 12:07
谢谢各位的回答,明白了!




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