使用Java中的Integer对象比较运算符的安全性

时间:2014-10-30 23:22:23

标签: java reference integer comparison-operators

何时使用比较运算符是安全的,例如==,> =,<在Java中使用Integer对象而不是原始的int?

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

我知道==对于引用是危险的,你应该使用.equals,但其他运算符呢? e.g。

int x = 7;
int y = 7;
Integer a = new Integer(7);
Integer b = new Integer(7);

System.out.println(x == y);
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(a <= b);

打印

true
false // Why you should use .equals
true
true // Seemed dangerous but it worked?

是否可以使用除双等于以外的任何东西(So&gt;,&lt;,&gt; =和&lt; =安全吗?),还是应该使用.compareTo()方法?

3 个答案:

答案 0 :(得分:5)

变量引用null时很危险。取消装箱操作将导致NullPointerException

<=>=运算符与==不同。 They can only be applied to numerical primitive types (and values),因此参考平等不是问题。

答案 1 :(得分:1)

  • 如果您知道这些值不为空,那么< > <= >=一切正常,它们将取消装箱到int
  • 您可能不想使用==!=,除了检查操作数是否为空。他们会进行参考比较,而不是值比较 - 所以你可能想要使用equals方法。
  • 如果其中一个值可能为空,则< > <= >=不安全 - 他们可以提供NullPointerException

答案 2 :(得分:0)

运营商可以使用灵长类动物。 方法(例如.equals()或.equalsIgnoreCase()) 用于对象。