我知道您不能使用==或!=来比较数字对象的值,而是必须使用.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; =运算符类,或者只是我的编译器不支持的功能?
答案 0 :(得分:8)
是的,但请注意Integer
是对象,而不是原始int
。 >
,<
,>=
和<=
运算符的使用不是针对对象,而是针对基元,因此在使用其中任何一个时,Integer
是自动装箱到int
。在对象中使用==
时,您正在比较它们的引用。请使用equals
来比较它们。
请注意,Integer
类有一个缓存,用于存储从Integer
到-128
的{{1}}个引用。这意味着如果你这样做:
127
将打印Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
。