java - 在Java中,对象变量是否包含对象的地址?

标签 java

我和我的老师聊天,她提到一个对象变量(她的意思是一个对象的实例)并不包含对象本身,而是内存中的地址。

我听说在 Java 中,对象的实例实际上包含对内存中对象的引用。我错了吗?引用是否与包含内存中的地址或其他内容相同?

最佳答案

对象变量对象的实例不同。区分变量、它们的值和对象是真的重要的。

例如:

String x = "hello";

变量x。它就像一张纸,可以在上面写上一个

变量的 是一个引用 - VM 可以使用一些数据来获取字符串对象本身。它不一定是地址 - 它只是“获取对象数据的一种方式”。 (有关这方面的更多信息,请阅读 Eric Lippert 的博客文章 "References are not addresses" - 谈论的是 C# 而不是 Java,但原理相同。)

对象本身是一个独立的实体。

举个现实世界的例子,假设我有一张纸,上面写着我的家庭住址。这里显然有三件事:

  • 那张纸(像一个变量)。这张纸本身不是我的家庭住址,也不是房子。它只是可以存储值的东西。
  • 我的家庭住址不是一张纸,也不是一座房子。这只是一个让某人得到到我家的值。
  • 我的房子既不是一张纸,也不是一个地址。这是一个对象。

当您考虑参数传递和变量赋值等事情时,这一点变得很重要。例如:

House x = new House("Jon");
House y = x;

这里我们有两个变量,xy,就像两张纸一样。我们 build 一座房子,并在 x 上写下通往它的方向。然后我们复制写入x 的值到y。请注意,它们仍然是完全独立的纸片——但它们目前具有相同的值。只有一个对象 - 我们只盖了一栋房子 - 但现在两张纸上的方向相同。

如果一个人按照一张纸 x 上的指示将前门漆成红色,然后另一个人按照一张纸 y 上的指示,他们' d 找一栋前门是红色的房子。

另一方面,如果一个人在一张纸 x 上潦草地写下方向,那根本不会影响写在一张纸 y 上的方向.

关于java - 在Java中,对象变量是否包含对象的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8933557/

相关文章:

java - Java 中分配默认值的标准方法

java - 在 Swing 事件监听器中阻止调用

java - 振动直到按下按钮,当按钮未按下(或手指离开)时停止振动

java - 递归划分数组

Java将整数转换为字符串并计算

java - 过滤 - 如何让 JTable 显示 x 数量的字段

java - 在表格行中查找空 Div 的标题 - Selenium Java

java - 关闭前在android应用程序上执行简单代码

java - 使用for循环查找字符数组中的数字之和

java - 在使用Web框架之前我需要了解JSP吗?