Rom*_*man 24 java comparison if-statement equals
我有应该是相等的整数(我通过输出验证它).但在我的if条件下,Java并没有看到这些变量具有相同的值.
我有以下代码:
if (pay[0]==point[0] && pay[1]==point[1]) {
game.log.fine(">>>>>> the same");
} else {
game.log.fine(">>>>>> different");
}
game.log.fine("Compare:" + pay[0] + "," + pay[1] + " -> " + point[0] + "," + point[1]);
Run Code Online (Sandbox Code Playgroud)
它产生以下输出:
FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145
Run Code Online (Sandbox Code Playgroud)
可能我必须添加这样point定义:
Integer[] point = new Integer[2];
Run Code Online (Sandbox Code Playgroud)
并且pay我们从环路构造采取:
for (Integer[] pay : payoffs2exchanges.keySet())
Run Code Online (Sandbox Code Playgroud)
因此,这两个变量都具有整数类型.
aio*_*obe 59
对象(例如Integers)不应该通过==,而是通过.equals().
重要的是要理解几个不同的Integer对象可以表示相同的int值.当您的程序打印时,>>> different它只是说第一个对象与第二个对象不是同一个对象.(虽然您可能希望根据它们代表的值来比较对象.)
[...] ==运算符对整数表达式执行引用标识比较,并对int表达式执行值相等比较.[...]
值得注意的是,自动装箱可以保证在[-128,127]范围内为整数值返回相同的对象,但是实现可以自行决定缓存该范围之外的值.
我的一般建议是使用int而不是Integer所有本地/成员变量.在这种特殊情况下,您似乎将坐标存储在一个2元素数组中.我建议你将它封装在一个Coordinates类或类似的类中,并在这里覆盖equals方法(和hashCode).
也可以看看
sje*_*397 12
如果它们是简单的int类型,它将起作用.
对于Integer使用.intValue()或compareTo(Object other)或equals(Object other)在您的比较.
在 Java 中,-128 到 127 范围内的数值被缓存,因此如果您尝试比较
Integer i=12 ;
Integer j=12 ; // j is pointing to same object as i do.
if(i==j)
print "true";
Run Code Online (Sandbox Code Playgroud)
这会起作用,但是如果您尝试使用超出上述范围的数字,则需要将它们与 equals 方法进行比较以进行值比较,因为“==”将检查两者是否为相同的对象而不是相同的值。