黑马程序员技术交流社区
标题:
问题来了,关于Integer对象的自动拆装箱的问题,求高手解答~
[打印本页]
作者:
杨卓儒
时间:
2012-9-4 17:46
标题:
问题来了,关于Integer对象的自动拆装箱的问题,求高手解答~
本帖最后由 杨卓儒 于 2012-9-4 18:44 编辑
public static void main(String[] args) {
// TODO Auto-generated method stub
//自动装箱
Integer iObj =3;
//自动拆箱
System.out.println(iObj+12);
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1==num2);//结果为 true
Integer num3 = 129;
Integer num4 = 129;
System.out.println(num3==num4);//结果为false
Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);
System.out.println("num5="+num5);
System.out.println("num6="+num6);
System.out.println(num6==num5);//true
Integer num7 = Integer.valueOf(213);
System.out.println("num7="+num7);
System.out.println(num7.toString());
Integer num8 = Integer.valueOf(213);
System.out.println("num8="+num8);
System.out.println(num8.toString());
System.out.println(num7==num8);//false
System.out.println(num7.toString()==num8.toString());//false
}
复制代码
虽然知道,小于一个字节的Integer对象会应用享元模式,存储在常量池,但是我查了一下Integer对象,里面的valueOf是返回一个Integer对象,所以num7一定不等于num8
但是问题来了,Integer对象的toString 返回的是一个字符串啊,而且我打印了num7 和 num8返回的字符串都是213啊,为啥还是false
作者:
全海波
时间:
2012-9-4 17:52
本帖最后由 全海波 于 2012-9-4 17:55 编辑
public static void main(String[] args) {
// TODO Auto-generated method stub
//自动装箱
Integer iObj =3;
//自动拆箱
System.out.println(iObj+12);
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1==num2);//结果为 true
Integer num3 = 129;
Integer num4 = 129;
System.out.println(num3==num4);//结果为false
Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);
System.out.println("num5="+num5);
System.out.println("num6="+num6);
System.out.println(num6==num5);//true
Integer num7 = Integer.valueOf(213);
System.out.println("num7="+num7);
System.out.println(num7.toString());
Integer num8 = Integer.valueOf(213);
System.out.println("num8="+num8);
System.out.println(num8.toString());
System.out.println(num7.equals(num8));//false
//很简单,把“==”改成“equals”就行了,想想“==”与“equals”的区别!
System.out.println(num7.toString()== num8.toString());//false
}
复制代码
改之前,如下:
2.jpg
(14.23 KB, 下载次数: 69)
下载附件
2012-9-4 17:54 上传
改之后,如下:
1.jpg
(17.43 KB, 下载次数: 61)
下载附件
2012-9-4 17:54 上传
作者:
杨习平
时间:
2012-9-4 17:57
你既然说了Integer对象里面的valueOf是返回一个Integer对象,所以num7一定不等于num8,所以当你将它各自转化成字符串类型是他们还是两个对象。他们指向的地址值肯定是不一样的,虽然他们的对象值是一样的,但结果肯定还是false。
作者:
杨卓儒
时间:
2012-9-4 18:44
懂了,谢谢大家,我都忘了是String类型了,不能用==了啊,就上面我打印了一次NUM7和NUM8把我误导了。
作者:
舒远
时间:
2012-9-5 12:56
你把==理解成equals了。虽然值相等。但是==比较的是对象的内存地址。这两个对象内存地址显然不等。除基本类型外,比较值最好用equals方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2