gpt4 book ai didi

Java 类型、值比较

转载 作者:行者123 更新时间:2023-12-01 09:39:49 24 4
gpt4 key购买 nike

我试图了解 Java 中某些类型的真实表是什么。

我无法理解顶部一个返回 true 而下面一个返回 false 的方式?

public class CompareTypes{

public static void main(String[] args){

// -------------------------------------
Integer AA = 12;
Integer BB = 12;
System.out.println( AA == BB ); // true

// -------------------------------------
Integer a = 128;
Integer b = 128;
System.out.println( a == b ); // false


}

}

最佳答案

您正在看到自动装箱的产物。

Integer对象具有不同的对象 ID,这意味着两个不同的 Integer对象将是 false对于 == 。然而,valueOf方法缓存 Integer 的前 127 个值目的。当您创建Integer时在 -128 和 +127 之间,通过其 valueOf 静态工厂,您将获得完全相同的对象。当您创建一个值 >= 128 的对象时,您每次都会得到一个全新的对象,具有不同的 id,因此不会直观地响应 ==打电话。

自动装箱使用 valueOf方法进行自动装箱,这就是为什么对象引用创建为 Integer来自 int 的对象字面量小于 128 的作品。创建两个 Integer 的行然而,值为 128 的对象会创建两个不同的对象。

这个故事的寓意是

  • 尝试使用.equals()对于值类型
  • 谨防混淆文字类型和装箱类型。

https://blogs.oracle.com/darcy/entry/boxing_and_caches_integer_valueof

关于Java 类型、值比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com