Java练习中值和引用之间的区别?

问题描述 投票:4回答:4

我正在从Udemy, complete java masterclass学习Java。对于挑战“抽象类挑战”,叙述者说我应该在抽象类中创建2个引用和1个值。

在解决方案中,这是结果:

public abstract class ListItem {
    // references
    protected ListItem rightLink = null;
    protected ListItem leftLink = null;

    // value
    protected Object object;
}

什么使引用成为引用而不是值?

它们都以protected开头,然后我们有类型,然后我们有变量名。唯一的区别是引用已赋值null。

但如果要举例如:

private int myNumber = 10;

上面不称为引用,它被称为类型为int的变量myNumber,值为10。

java class
4个回答
12
投票

它不是Java语言环境中的值。在Java语言的上下文中,所有三个字段都是引用。

我将其视为链表上下文中的值。在链表的上下文中,类型为Object的对象将是存储在列表中的实际值。而ListItem是对另一个列表项的引用,因为这是链接列表的连接方式。

似乎课程材料没有尽可能清晰。


3
投票

单词“value”和“reference”在编程语言(包括Java)的上下文中具有非常特定的含义。

但是,这种区别在这里不适用,因为链接和对象都是使用引用实现的。作者正在以更抽象的方式使用这些词来实现数据结构。

通常,数据结构具有“有效载荷”数据的存储,并且可选地存储用于支持数据结构本身的内部工作所需的数据:

  • 数组只有有效载荷数据的空间,
  • 链表有额外的空间用于指向下一个节点的链接,
  • 树有额外的空间用于链接到父节点和子节点,
  • 哈希表具有用于散列桶的额外空间

等等。当作者说“价值”时,他们指的是存储“有效载荷”数据的变量;当他们说“引用”时,它们意味着用于存储辅助信息的变量,从而实现数据结构的内部工作。在这种情况下,看起来他们希望你建立一个doubly linked list


2
投票

我认为本教程将向您展示如何创建LinkedList。所以ListItem必须保留对下一个和上一个Item的引用,所以你的引用是:

protected ListItem rightLink = null;
protected ListItem leftLink = null;

另外,每个Item都可以保留一些值,所以你的值是:

protected Object object;

它可以是任何其他类变量,但教程创建者需要Object。


-1
投票

传递价值与参考视觉解释

Visual Explanation

我想你访问链接Passing by Value vs. by Reference ,你可以找到解决方案

© www.soinside.com 2019 - 2024. All rights reserved.