我和我的老师聊天,她提到一个对象变量(她的意思是一个对象的实例)并不包含对象本身,而是内存中的地址。
我听说在 Java 中,对象的实例实际上包含对内存中对象的引用。我错了吗?引用是否与包含内存中的地址或其他内容相同?
最佳答案
对象变量与对象的实例不同。区分变量、它们的值和对象是真的重要的。
例如:
String x = "hello";
变量 是x
。它就像一张纸,可以在上面写上一个值。
变量的值 是一个引用 - VM 可以使用一些数据来获取字符串对象本身。它不一定是地址 - 它只是“获取对象数据的一种方式”。 (有关这方面的更多信息,请阅读 Eric Lippert 的博客文章 "References are not addresses" - 谈论的是 C# 而不是 Java,但原理相同。)
对象本身是一个独立的实体。
举个现实世界的例子,假设我有一张纸,上面写着我的家庭住址。这里显然有三件事:
- 那张纸(像一个变量)。这张纸本身不是我的家庭住址,也不是房子。它只是可以存储值的东西。
- 我的家庭住址不是一张纸,也不是一座房子。这只是一个让某人得到到我家的值。
- 我的房子既不是一张纸,也不是一个地址。这是一个对象。
当您考虑参数传递和变量赋值等事情时,这一点变得很重要。例如:
House x = new House("Jon");
House y = x;
这里我们有两个变量,x
和y
,就像两张纸一样。我们 build 一座房子,并在 x
上写下通往它的方向。然后我们复制写入x
的值到y
。请注意,它们仍然是完全独立的纸片——但它们目前具有相同的值。只有一个对象 - 我们只盖了一栋房子 - 但现在两张纸上的方向相同。
如果一个人按照一张纸 x
上的指示将前门漆成红色,然后另一个人按照一张纸 y
上的指示,他们' d 找一栋前门是红色的房子。
另一方面,如果一个人在一张纸 x
上潦草地写下方向,那根本不会影响写在一张纸 y
上的方向.
关于java - 在Java中,对象变量是否包含对象的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8933557/