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

lar*_*pal 3 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));
Run Code Online (Sandbox Code Playgroud)

产生

a <  b false
a <= b true
a == b false
a >= b true
a >  b false
Run Code Online (Sandbox Code Playgroud)

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

Lui*_*oza 8

是的,但请注意,Integer它们是对象,而不是原始对象int.的使用>,<,>=<=运营商不是为对象,但对于原语,因此在使用这些时,将Integer被autoboxed到int.在使用==对象时,您正在比较它们的引用.使用equals,而不是对它们进行比较.

不过,请注意,Integer类有存储的缓存Integer从引用-128127.这意味着如果你这样做:

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
Run Code Online (Sandbox Code Playgroud)

会打印true.