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

时间:2017-12-19 11:41:25

标签: java class

我正在从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.

4 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:3)

Word" value"和"参考"在编程语言的上下文中具有非常特殊的含义,包括Java。

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

通常,数据结构具有存储用于"有效载荷"数据,以及可选的支持数据结构本身内部工作所需的数据:

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

等等。当作者说"价值"它们是指用于存储"有效载荷的变量"数据;当他们说"参考"它们表示存储辅助信息的变量,可以实现数据结构的内部工作。在这种情况下,看起来他们希望您构建doubly linked list

答案 2 :(得分:2)

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

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

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

protected Object object;

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

答案 3 :(得分:-1)

传递值与参考视觉解释

Visual Explanation

我认为您访问了链接Passing by Value vs. by Reference ,您可以找到解决方案