当我尝试比较2个Long变量时,我遇到了一个非常奇怪的问题,它们始终显示为false,并且可以通过在Eclipse中进行调试来确保它们具有相同的数字值:
if (user.getId() == admin.getId()) {
return true; // Always enter here
} else {
return false;
}
以上两个返回值都是对象类型Long,这使我感到困惑。并确认我编写了这样的主要方法:
Long id1 = 123L;
Long id2 = 123L;
System.out.println(id1 == id2);
它打印真实。
有人可以给我个主意吗?我从事Java开发已经3年了,但是无法解释这种情况。
==
比较参考,.equals()
比较值。这两个Long是对象,因此使用==
运算符时会比较对象引用。
但是,请注意,使用会将Long id1 = 123L;
字面值123L
自动装箱到Long
对象中Long.valueOf(String)
,并且在内部,此过程将使用LongCache,该LongCache具有[-128,127]
范围,并且123在此范围内,这意味着将对long对象进行缓存,并且这些两个实际上是相同的对象。
问题内容: 如何在Java中找到两个长数值的模(%)?我的代码说“整数太大”,后面跟我要修改的数字。我尝试将其强制转换很长时间,但没有成功。我是否必须将其转换为BigInteger并使用剩下的方法?谢谢。 问题答案: 该运营商做工作多头。听起来您可能忘记了放在数字文字的末尾,如中所示。我们可以看到您的代码吗?
代码 产出(如预期) 1.post increment运算符()在表中具有最高的优先级。因此它肯定会在赋值运算符()之前执行。根据post增量规则,变量的值只有在执行该语句之后才会增加。 参见有rvalue 3,而不是变量本身,对吗?但是如果它带来了一个具有lvalue的变量,那么5将插入其中,在语句结束后,它的值将是6。这有什么问题,为什么做不到?
问题内容: 从C ++到Java,一个显而易见的未解决问题是Java为什么不包括运算符重载? 没有;比这简单;吗? 是否存在已知的原因,有效的论据,不使运算符重载?原因是任意的还是迷失了时间? 问题答案: 假设你想覆盖所引用的对象的先前值a,则必须调用成员函数。 在C ++中,此表达式告诉编译器在堆栈上创建三(3)个对象,执行加法,然后将结果值从临时对象复制到现有对象中。 但是,在Java中,不对
本文向大家介绍什么是MySQL NULL安全相等运算符,它与比较运算符有何不同?,包括了什么是MySQL NULL安全相等运算符,它与比较运算符有何不同?的使用技巧和注意事项,需要的朋友参考一下 与标准SQL IS NOT DISTINCT FROM运算符等效的MySQL NULL安全相等运算符执行等于运算符的相等比较。其符号为<=>。当我们两个操作数都为NULL时,它的性能与比较运算符不同。请看
我试图用if-let表达来概括我的大脑。我知道它的作用,但我找不到一些细节背后的基本原理。 第一个细节是赋值运算符而不是相等运算符的使用,第二个细节是操作数的位置。 例如: 在我看来,这样更“清晰”: 或者更好: 有人能帮我理解这背后的原理吗?