java怎么打印一个对象的内存地址

2019-10-24  本文已影响0人  帮我的鸵鸟盖个章

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

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

    public static void main(String[] args) {
        String str1 = new String("hong");
        String str2 = new String("hong");
        System.out.println("str1-identityHashCode:" + System.identityHashCode(str1));
        System.out.println("str2-identityHashCode:" + System.identityHashCode(str2));
        System.out.println("str1-hashCode:" + str1.hashCode());
        System.out.println("str2-hashCode:" + str2.hashCode());
        System.out.println("str1 == str2 :" + (str1 == str2));

        String str3 = "icarus";
        String str4 = "icarus";
        System.out.println("str3-identityHashCode:" + System.identityHashCode(str3));
        System.out.println("str4-identityHashCode:" + System.identityHashCode(str4));
        System.out.println("str3-hashCode:" + str3.hashCode());
        System.out.println("str4-hashCode:" + str4.hashCode());
        System.out.println("str3 == str4:" + (str3 == str4));
    }

打印:

str1-identityHashCode:1915910607
str2-identityHashCode:284720968
str1-hashCode:3208448
str2-hashCode:3208448
false
str3-identityHashCode:189568618
str4-identityHashCode:189568618
str3-hashCode:-1194474839
str4-hashCode:-1194474839
false

identityHashCode()源码:

    /**
     * Returns the same hash code for the given object as
     * would be returned by the default method hashCode(),
     * whether or not the given object's class overrides
     * hashCode().
     * The hash code for the null reference is zero.
     *
     * @param x object for which the hashCode is to be calculated
     * @return  the hashCode
     * @since   JDK1.1
     */
    public static native int identityHashCode(Object x);

可以知道identityHashCode实际上返回的就是hashCode(),重写之前的hashCode()

上一篇 下一篇

猜你喜欢

热点阅读