美文网首页
java怎么打印一个对象的内存地址

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

作者: 帮我的鸵鸟盖个章 | 来源:发表于2019-10-24 14:19 被阅读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()

相关文章

  • 内存对齐

    8字节:指针大小、对象、属性 首先打印出对象获取内存地址: 然后打印内存地址:用x打印内存地址 然后打印内存地址:...

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

    Object的hashCode()默认是返回内存地址的,但是hashCode()可以重写,所以hashCode()...

  • Java 打印对象的内存地址

    先来看java编程思想的上一个例子: 这个程序是运行时会得到一长串异常, 这是因为return " Infinit...

  • 常用的LLDB命令

    打印对象 print、p:打印 po:打印对象 读取内存 memory read/数量格式字节数 内存地址 x/...

  • swift基础_内存管理

    一. 打印一个对象 我们经常打印对象的内存地址,也从网上看到一个对象占用16个字节,那到底是不是呢?让我们先来打印...

  • iOS底层原理--001:alloc & init

    内存地址 & 指针地址 搭建allocDemo项目打印对象的内存地址和指针地址- (void)viewDidLoa...

  • 自定义NSLog打印内容

    开发中通过NSLog的%@打印自定义的对象时,只会打印出一个对象的内存地址。例如:(xxxview:0xb6774...

  • 常用LLDB指令

    print , p打印内存地址 po打印对象 memory read 或者 x读取内存 memory read后边...

  • LLDB指令

    print / p : 打印 po : 打印对象 读取内存memory read / 数量格式字节数 内存地址x...

  • Objc4-818底层探索(一):alloc

    首先先看个例子: 他们的打印情况为 首先了解下, 三个打印依次是打印 对象内容, 对象指针指向的内存地址, 指针地...

网友评论

      本文标题:java怎么打印一个对象的内存地址

      本文链接:https://www.haomeiwen.com/subject/qgorvctx.html