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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨卓儒 于 2012-9-4 18:44 编辑
  1. public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                 //自动装箱
  4.                 Integer iObj =3;
  5.                 //自动拆箱
  6.                 System.out.println(iObj+12);
  7.                

  8.                
  9.                 Integer num1 = 12;
  10.                 Integer num2 = 12;
  11.                 System.out.println(num1==num2);//结果为 true
  12.                
  13.                 Integer num3 = 129;
  14.                 Integer num4 = 129;
  15.                 System.out.println(num3==num4);//结果为false
  16.                
  17.                 Integer num5 = Integer.valueOf(12);
  18.                 Integer num6 = Integer.valueOf(12);
  19.                 System.out.println("num5="+num5);
  20.                 System.out.println("num6="+num6);
  21.                 System.out.println(num6==num5);//true
  22.                
  23.                 Integer num7 = Integer.valueOf(213);
  24.                 System.out.println("num7="+num7);
  25.                 System.out.println(num7.toString());
  26.                 Integer num8 = Integer.valueOf(213);
  27.                 System.out.println("num8="+num8);
  28.                 System.out.println(num8.toString());
  29.                 System.out.println(num7==num8);//false
  30.                 System.out.println(num7.toString()==num8.toString());//false
  31.         }
复制代码
虽然知道,小于一个字节的Integer对象会应用享元模式,存储在常量池,但是我查了一下Integer对象,里面的valueOf是返回一个Integer对象,所以num7一定不等于num8
但是问题来了,Integer对象的toString 返回的是一个字符串啊,而且我打印了num7 和 num8返回的字符串都是213啊,为啥还是false


评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
你把==理解成equals了。虽然值相等。但是==比较的是对象的内存地址。这两个对象内存地址显然不等。除基本类型外,比较值最好用equals方法。
回复 使用道具 举报
懂了,谢谢大家,我都忘了是String类型了,不能用==了啊,就上面我打印了一次NUM7和NUM8把我误导了。
回复 使用道具 举报
你既然说了Integer对象里面的valueOf是返回一个Integer对象,所以num7一定不等于num8,所以当你将它各自转化成字符串类型是他们还是两个对象。他们指向的地址值肯定是不一样的,虽然他们的对象值是一样的,但结果肯定还是false。
回复 使用道具 举报
本帖最后由 全海波 于 2012-9-4 17:55 编辑
  1. public static void main(String[] args) {

  2.                 // TODO Auto-generated method stub

  3.                 //自动装箱

  4.                 Integer iObj =3;

  5.                 //自动拆箱

  6.                 System.out.println(iObj+12);

  7.                



  8.                

  9.                 Integer num1 = 12;

  10.                 Integer num2 = 12;

  11.                 System.out.println(num1==num2);//结果为 true

  12.                

  13.                 Integer num3 = 129;

  14.                 Integer num4 = 129;

  15.                 System.out.println(num3==num4);//结果为false

  16.                

  17.                 Integer num5 = Integer.valueOf(12);

  18.                 Integer num6 = Integer.valueOf(12);

  19.                 System.out.println("num5="+num5);

  20.                 System.out.println("num6="+num6);

  21.                 System.out.println(num6==num5);//true

  22.                

  23.                 Integer num7 = Integer.valueOf(213);

  24.                 System.out.println("num7="+num7);

  25.                 System.out.println(num7.toString());

  26.                 Integer num8 = Integer.valueOf(213);

  27.                 System.out.println("num8="+num8);

  28.                 System.out.println(num8.toString());

  29.                 System.out.println(num7.equals(num8));//false
  30.                //很简单,把“==”改成“equals”就行了,想想“==”与“equals”的区别!
  31.                 System.out.println(num7.toString()== num8.toString());//false

  32.         }
复制代码
改之前,如下:

改之后,如下:

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马