java == 比较的是什么?

Object的hashCode()默认是返回内存地址的,但是hashCode()可以重写,所以hashCode()不能代表内存地址的不同。

System.identityHashCode(Object)方法可以返回对象的内存地址,不管该对象的类是否重写了hashCode()方法

 

对于对象,比较的是对象的内存地址

对于基本类型数据,其实比较的是它的值。

package zhengze;

import javax.swing.tree.TreeNode;
import java.lang.reflect.Field;
import java.util.*;
import java.util.function.Supplier;

public class IntegerTest extends Object{

    public static void main(String[] args)
    {
        String s = new String("OK");
        String z = new String("OK");
        String a = "OK";
        String b = "OK";
        System.out.println(System.identityHashCode(s));
        System.out.println(System.identityHashCode(a));
        System.out.println(System.identityHashCode(b));
        System.out.println(System.identityHashCode(z));
        int a1 = 12;
        int b1 = 12;
        System.out.println(System.identityHashCode(a1));
        System.out.println(System.identityHashCode(b1));
        int a2 = 256;
        int a3 = 256;
        System.out.println(System.identityHashCode(a2));
        System.out.println(System.identityHashCode(a3));
        System.out.println(a2 == a3); //基本类型,地址不一样,输出true
        Integer a4 = 126;
        Integer a5 = 126;
        System.out.println(System.identityHashCode(a4));
        System.out.println(System.identityHashCode(a5));
        System.out.println(a4 == a5); //包装类,小于127,true
        a4 = 256;
        a5 = 256;
        System.out.println(System.identityHashCode(a4));
        System.out.println(System.identityHashCode(a5));
        System.out.println(a4 == a5); //大于127,false;
      //对于Integer对象来说,常量区存储了(-128~127),超过范围则存储到堆内存中
    }
}

 

posted @ 2020-06-01 08:39  十里坡剑神—》》》》  阅读(563)  评论(0编辑  收藏  举报