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的地址是否一样。 |