java - 为什么ArrayList打印实际值而不是内存地址?

标签 java arraylist reference

在Java中,我理解原始数据类型存储为值,其余数据类型存储为引用。那为什么打印ArrayList实例变量时得到的是实际值而不是内存地址呢?我有一个数组变量只是用于比较目的。

    public static void main(String[] args) {

        Object[] a = new Object[3];
        a[0] = 0;
        a[1] = 1;
        a[2] = 2;

        ArrayList<Object> b = new ArrayList<Object>();
        b.add(3);
        b.add(4);

        System.out.println(a);
        System.out.println(b);

    }

最佳答案

两个原因

  • 因为 Object.toString() 方法已被重写。
  • 因为javadocs表示扩展 AbstractCollection 类的任何类型的 toString() 方法将显示集合的内容,而不是其“地址”。

此外,Object.toString() 实际上并不显示地址。它显示身份哈希码,可能与对象的地址相关,也可能不相关。 (并且两个不同的对象可以具有相同的身份哈希码,因此它不是对象相同的可靠指标。)

如果要测试两个对象引用(任何类型)是否引用同一个对象,请使用 ==

您不需要查看地址,即使您弄清楚如何获取对象的真实地址...对象地址会在 GC 移动它们时发生变化,因此这可能不是 100% 可靠的方法测试对象。<​​/p>

关于java - 为什么ArrayList打印实际值而不是内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67052417/

相关文章:

java - Spring Boot 应用程序中对 REST 端点的自定义访问控制

java - Gson反序列化生成NULL值

java - 尝试用 Java 编写一个方法,在给定 customerID 的情况下搜索数据库列表并返回 Customer 对象

java - 通过在 Groovy 闭包中通过引用传递参数来动态设置变量

c++ - 引用重新分配

java - 减少添加图像的代码量

Java 正则表达式问题?

java - 使用 Gradle 创建 "fat-JAR"时,log4j.properties 被覆盖

java - 使用第一个元素和附加集合进行列表初始化

python - 在 Python 中传递 "pointer to a virtual function"作为参数