繁体   English   中英

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

[英]Safety of comparison operators with Integer objects in Java

在使用Integer对象而不是原始int的情况下,什么时候可以比较安全地使用比较运算符(例如==,> =,<)?

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

我知道==对于引用很危险,您应该改用.equals,但是其他运算符呢? 例如

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?

可以使用除double equals以外的其他方法(所以>,<,> =和<=是安全的吗?),还是应该使用.compareTo()方法?

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

<=>=运算符不同于== 它们只能应用于数字基本类型(和值) ,因此引用相等性不是问题。

  • 如果您知道这些值不为null,则< > <= >= <=> < > <= >=都可以,它们将对int取消装箱。
  • 除了检查操作数是否为空之外,您可能永远不想使用==!= 他们将进行引用比较,而不是值比较-因此您可能想要使用equals方法。
  • 如果这些值之一可能为null,则< > <= >=是不安全的-它们可以给出NullPointerException

运算符对基元没问题。 方法(例如.equals()或.equalsIgnoreCase())用于对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM