当前位置: 首页 > 知识库问答 >
问题:

为什么==与Integer.ValueOf(String)进行比较会给出127和128不同的结果?

骆鸿运
2023-03-14
System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));
true
false
true

我已经阅读了这个问题的答案,但是我仍然不知道它如何返回true以及为什么第二行中的代码返回false

共有1个答案

阙沛
2023-03-14

这里有一个显著的区别。

valueof返回的是integer对象,该对象的值可能缓存在-128和127之间。这就是为什么第一个值返回true-它是缓存的-而第二个值返回false-128不是缓存的值,所以您得到了两个单独的integer实例。

需要注意的是,您正在将引用与integer#valueof进行比较,如果您正在比较的值大于缓存支持的值,则即使解析的值是等效的,它也不会计算为true(示例:integer.valueof(128)==integer.valueof(128))。您必须改用equals()

 类似资料:
  • 问题内容: 输出: 输出: 注意:-128至127之间的数字为真。 问题答案: 当你使用Java编译数字文字并将其分配给Integer(大写)时,编译器将发出: 当你使用自动装箱时,也会生成此行代码。 valueOf 实现了“合并”某些数字,对于小于128的值,它将返回相同的实例。 从Java 1.6源代码的第621行: high可以使用system属性将的值配置为另一个值。 如果使用该系统属性运

  • 问题内容: 我想使用条件比较两个 Long 对象的值。当这些值 小于128时 ,条件将正常工作,但是当这些 值大于或等于128时 ,比较将失败。 例: 上面代码的比较正常进行,但是下面代码失败: 为什么将 Long 变量与 大于127的 值进行比较会出现问题?如果将变量数据类型更改为 长原语 ,则比较适用于所有情况。 问题答案: TL; DR Java将装箱的Integer实例从缓存到。由于您用于

  • 问题内容: 我的代码在以下一行中断了一个nullpointerexception: 在此语句之前,我声明stringVariable并将其设置为数据库字段。 在此声明中,我试图检测该字段是否具有值,但是不幸的是它损坏了! 有什么想法吗? 问题答案: 用 为了测试是否是。 该方法(以及所有其他方法)需要为不是。

  • 问题内容: 我对为什么该操作有效感到非常困惑。有人可以解释吗? 为了澄清起见,我正在尝试将字符串与变量进行比较。我已经知道要修复可以随便附上in s中的代码 我想知道这是PHP错误,服务器错误还是某种有效的操作。根据此操作 无效 。 编辑: 从头开始,显然它确实提到字符串和0之间的松散比较是正确的。但是我仍然不知道为什么。 编辑2: 我修改了我的问题,为什么值不起作用? 问题答案: 从PHP手册:

  • 问题内容: 我尝试将matlab代码转换为numpy,并发现numpy与std函数的结果不同。 在matlab中 在numpy中 这正常吗?我应该如何处理呢? 问题答案: NumPy函数采用一个可选参数:“自由度增量”。默认情况下是。对其进行设置以获取MATLAB结果: 要添加更多上下文,在计算方差(标准偏差为平方根)时,通常将其除以我们拥有的值的数量。 但是,如果我们从较大的分布中选择元素的随机