我有 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/52913063/