java中== 和 equals 区别是什么?

==如果是基本类型是比较值,如果是引用类型则是比较内存地址
equals比较的是引用参数的值

例1

        // -128 ~ +127 之间
        Integer a = 5;
        int b = 5;
        Integer c = new Integer(5);
        Integer d = 5;

        System.out.println(a.equals(b)); //true
        System.out.println(a == b); //true
        System.out.println(a.equals(c)); //true
        System.out.println(a == c); //false
        System.out.println(a == d); //true
        System.out.println("a对象映射的内存地址" + System.identityHashCode(a));// 366712642
        System.out.println("b对象映射的内存地址" + System.identityHashCode(b));// 366712642
        System.out.println("c对象映射的内存地址" + System.identityHashCode(c));// 1829164700
        System.out.println("d对象映射的内存地址" + System.identityHashCode(d));// 366712642

例2

        // -128 ~ +127 之外
        Integer a = 128;
        int b = 129;
        Integer c = new Integer(128);
        Integer d = 128;

        System.out.println(a.equals(b)); //false
        System.out.println(a == b); //false
        System.out.println(a.equals(c)); //true
        System.out.println(a == c); //false
        System.out.println(a == d); //false

        System.out.println("a对象映射的内存地址" + System.identityHashCode(a));// 531885035
        System.out.println("b对象映射的内存地址" + System.identityHashCode(b));// 1418481495
        System.out.println("c对象映射的内存地址" + System.identityHashCode(c));// 303563356
        System.out.println("d对象映射的内存地址" + System.identityHashCode(d));// 135721597

通过以上例子可以看出-128 ~ +127 之间和-128 ~ +127 之外的区别则是内存地址的不同
-128 ~ +127 之间是JVM中栈中已存在的值
-128 ~ +127 之外则是堆中新开辟的内存地址

posted @ 2021-11-23 14:37  Java程序位移师  阅读(41)  评论(0)    收藏  举报