我知道你不能使用==或!=来比较数字对象的值,而是必须使用.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)
这似乎表示所有运算符,但==比较值,而不是对象的地址.是否接受使用<=运算符类,或只是我的编译器不支持的功能或什么?
是的,但请注意,Integer它们是对象,而不是原始对象int.的使用>,<,>=和<=运营商不是为对象,但对于原语,因此在使用这些时,将Integer被autoboxed到int.在使用==对象时,您正在比较它们的引用.使用equals,而不是对它们进行比较.
不过,请注意,Integer类有存储的缓存Integer从引用-128到127.这意味着如果你这样做:
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
Run Code Online (Sandbox Code Playgroud)
会打印true.