日期:2014-05-20  浏览次数:20639 次

关于Integer.valueOf?
为什么
  boolean a = (Integer.valueOf("1") == Integer.valueOf("1"));
  boolean b = (Integer.valueOf("1") > Integer.valueOf("1"));
  boolean c = (Integer.valueOf("1") < Integer.valueOf("1"));
  System.out.println(a);
  System.out.println(b);
  System.out.println(c);


输出结果:
false
false
false

是Integer类型不能进行比较么?

------解决方案--------------------
Integer是一个对象,如果直接用==,<,>这些比较是符合对象比较法则
并不是值~`
------解决方案--------------------
看看jdk的源代码就知道了
Integer.valueOf 生成了新的Integer对象
------解决方案--------------------
Integer.parse(str)中实际上是new Integer(parseInt(s, 10));

也就是总是返回一个新的Integer对象,所以a是false



Integer.valueOf("1") > Integer.valueOf("1")

实际上被编译器改成Integer.valueOf("1").intValue() > Integer.valueOf("1").intValue();
所以是false
------解决方案--------------------
Integer是封装类型,用操作符比较的是引用。
------解决方案--------------------
2楼说的对,生成新对象,所以是false.
------解决方案--------------------
产生新类
eques进行比较
------解决方案--------------------
哥哥,不是对象杂能用==比较呢,如果你确实要这样的话,哪就利用1.5以后的自动拆箱功能,如下

int a1 = (Integer.valueOf("1")
int a2 = Integer.valueOf("1")); 
boolean a = a1==a2;

System.out.println(a); 


注JDK1。5以后才能这样子,给分吧,