do< =和> =关系运算符使用Integer对象

时间:2014-05-29 17:30:55

标签: java

我知道您不能使用==或!=来比较数字对象的值,而是必须使用.equals()。但是经过大量的搜索之后,我还没有找到关于你是否可以使用其他比较运算符的声明,除了使用.compare()或.compareTo()的建议,因为它们感觉效率低下需要两个比较:a到b,然后将其结果归零。

尽管==和!=比较了对象的地址,但其他比较运算符似乎比较了数值。例如,以下代码段:

Integer a = new Integer(3000);
Integer b = new Integer(3000);
System.out.println("a <  b " + (a < b));
System.out.println("a <= b " + (a <= b));
System.out.println("a == b " + (a == b));
System.out.println("a >= b " + (a >= b));
System.out.println("a >  b " + (a > b));

产生

a <  b false
a <= b true
a == b false
a >= b true
a >  b false

这似乎表示所有运算符,但==比较值,而不是对象的地址。是否接受使用&lt; =运算符类,或者只是我的编译器不支持的功能?

1 个答案:

答案 0 :(得分:8)

是的,但请注意Integer对象,而不是原始int><>=<=运算符的使用不是针对对象,而是针对基元,因此在使用其中任何一个时,Integer是自动装箱到int。在对象中使用==时,您正在比较它们的引用。请使用equals来比较它们。

请注意,Integer类有一个缓存,用于存储从Integer-128的{​​{1}}个引用。这意味着如果你这样做:

127

将打印Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2);