【问题标题】:Object reference clarifcation对象参考说明
【发布时间】:2016-04-15 00:30:52
【问题描述】:

如果我错了,请纠正我,我只是想澄清一下我的理解是正确的。

当您在 java 中创建对象时,您使用 new 关键字后跟类类型。前任。 new [someclassnamehere](); 根据您的构造函数,您可以通过在创建对象时在参数中提供参数来传递参数。

我不确定仅使用 new 关键字创建新对象 o 的一行代码是否有用,因为实际上没有任何东西持有对该信息的引用。但它似乎是正确的。

因此您可以使用type name创建一个包含对您正在创建的新对象的引用的变量。例如:Employee someData;。但它还没有真正引用一个对象,因为它还没有被创建。因此,通过应用上述讨论的信息: Employee someData = new Employee(name); 我们现在创建了一个包含员工姓名的Employee objectnew 关键字创建了 Employee 类的实例,这是一个对象,其中 someData 变量引用了新创建的对象。

所以现在可以说someData 变量引用了Employee object,因为它包含存储对象的内存地址。这个地址将允许我们访问对象的实际数据,在本例中是员工的姓名。

如果我要创建一个具有Employee 数据类型的ArrayList,我可以在其中存储Employee objects。所以我可以将someData 变量添加到arrayList 以及someData2someData3 等。 (假设它们都是同一类型但包含不同的员工信息)。 所以这些变量中的每一个都包含对这些对象的引用。然后ArrayList 对象也包含对这些对象的引用,因为ArrayList 元素包含这些引用Employee Objects 的 someData 变量。

示例:

ArrayList.get(1) -> someData ->  reference variable(address) -> employee Object
ArrayList.get(2) -> someData2 ->  reference variable(address) -> employee Object2

到目前为止,我很确定我已经理解了这个想法,但是让我有点失望的是你实际上没有创建引用变量。

假设您创建了一个循环,该循环创建了一个对象(正在从某个数据库等读取数据)并将其添加到ArrayList。在这个循环中,您收集您想要的数据并使用它来创建一个对象,然后将其直接添加到ArrayList

假设它看起来像这样(一些伪代码和实际代码的组合)

ArrayList<Employee> list = new ArrayList<Employee>();
// While data from the database still exist (while loop,etc)
// extract some sort of data from the database, such as their name and hours
// create an object of this information and store it in an ArrayList
list.add(new Employee(name, hours);
// end loop

为简单起见,假设循环运行了 5 次,因此它创建了 5 个对象。 这意味着它向 ArrayList List 添加了 5 个对象,并且对这些对象的引用实际上包含在 ArrayList 元素中。因此,要将第一个对象添加到 ArrayList,您将使用 list.get(1)(我很确定 ArrayList 从 1 开始,而不是 0 作为索引),它返回对该对象的引用。

编辑:请原谅我在这里的错误,我想我脑子有问题并且搞混了。我不知道为什么我认为 ArrayList 索引会这样工作一秒钟

这是通过使用循环创建对象的正确和标准方法吗?

【问题讨论】:

  • 答案是“是”,但我实际上不确定您想知道什么。这个问题非常广泛。
  • 除了 我很确定 ArrayList 从 1 开始,而不是从 0 开始索引 之外的所有内容都是正确的。 引用变量是某种引用类型的变量。 Employee 是一个引用类型。所以Employee someData;是一个引用变量的声明。
  • “ArrayList 元素包含这些 someData 变量” 这就是我不确定您是否正确的地方。 ArrayList 中没有变量,它也有引用。当您调用theArrayList.add(someData) 时,someData 的值(它指向的对象的地址)被复制。你最终得到的是两个独立的引用(一个在someData 变量中,一个在ArrayList 中),它们指向同一个对象。 Java 引用就像指针。可能看到stackoverflow.com/q/40480/2891664
  • @Radiodef 啊!你完全正确,我忘记了它实际上将引用变量复制到某个 n 索引处的元素。我让这一切正常工作,只是感觉有点奇怪,因为我以前从未通过循环创建对象。我想我只是想通过一些外部确认来对自己解释。

标签: java arraylist reference


【解决方案1】:

我不确定仅使用 new 关键字创建一个新对象 o 的一行代码是否有用,因为实际上没有任何东西持有对该信息的引用。但它似乎是正确的。

假设构造函数启动了一个新线程。没有参考,但是

new AmazingThread();

在这种情况下很好。

嗯,这个问题很大。是的,创建这样的对象是完全合法的。您可以认为 ArrayList 有自己的变量来存储引用。

【讨论】:

  • 感谢您的意见。是的,现在我已经查看了它,阅读了这里的 cmets 等,这似乎是有道理的。只是感觉有点不对劲,因为我以前从来没有真正处理过这样的问题,因此我想澄清一下我的想法。祝你早日/晚安!
猜你喜欢
  • 2014-01-20
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多