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),超过范围则存储到堆内存中
    }
}
诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。
原文地址:https://www.cnblogs.com/shilipojianshen/p/13023236.html