gpt4 book ai didi

java - "dereferencing"在Java中有正式或权威的定义吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:17 26 4
gpt4 key购买 nike

我有 C 和 C++ 背景,一直认为 Java 中的解引用是通过对象的引用访问对象的过程。

例如“ref”是一个引用,当用于访问它所引用的Integer对象时,它被解引用:

    Integer ref = new Integer(7);     
// Dereference "ref" to access the object it refers to.
System.out.println(ref.toString());

当取消引用过程失败时会发生 NullPointerExceptions:

Integer ref = null;
// Dereferencing "ref" causes an exception.
System.out.println(ref.toString());

但是,我的解释与在 Oracle 的新 Java SE 8 Programmer I exam (beta) 上测试的主题之一相冲突。 :

Explain an Object's Lifecycle (creation, "dereference by reassignment" and garbage collection)

因此根据 Java 8 考试的创建者的说法,Java 中的解引用是重新分配引用的行为,而不是评估引用的行为:

例如:

    // Create an Integer object, and a reference to it.
Integer ref = new Integer(7);
ref = null;
// Now (according to Oracle?):
// - The reassignment means ref has been "dereferenced".
// - The dereferenced object is now eligible for Garbage Collection.

谷歌搜索这个问题表明 Oracle 的定义被更广泛地使用,但这并不意味着它是正确的,并且在谷歌上唯一命中“通过重新分配取消引用”的是新的 Java 8 考试!无论哪种方式,JLS 都没有真正发挥作用。

对于取消引用在 Java 中的真正含义,是否有任何正式或权威的定义(与个人意见相反)? (即它是否与评估或重新分配有关?)

两个完全不同的定义能够共存似乎很奇怪。

最佳答案

虽然没有官方定义,但在一些 Java 错误语句中使用了“解引用”这个词。

例如,如果您编写以下代码:

char ch = 'A';
if (ch.isLetter()) { }

出现错误:char cannot be dereferenced

因此,可以说在 . 运算符的帮助下使用其引用来访问对象的状态或行为是取消引用。

关于java - "dereferencing"在Java中有正式或权威的定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com