有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java类型、值比较

我想看看Java中某种类型的表是什么

我不明白上面的一个返回真,下面的一个返回假

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


    }

}

共 (1) 个答案

  1. # 1 楼答案

    你看到的是自动装箱的人工制品

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

    自动装箱使用valueOf方法来进行自动装箱,这就是为什么对象引用从int文本中创建为Integer对象的工作少于128个。但是,创建两个值为128的Integer对象的行会创建两个不同的对象

    这个故事的寓意是

    • 尝试对值类型使用.equals()
    • 注意不要混淆文字类型和装箱类型

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