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

标签 java

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

相关文章:

java - 使用 executeupdate 从 mysql 数据库中删除记录(netbeans)

java - 从 Java 调用 MATLAB 命令窗口时如何隐藏它?

java - Android:getElapsedCpuTime 返回较少的毫秒数

java - 对 Swing 的撤消管理器隐藏某些操作

java - 数据因 JPA AttributeConverter 而丢失?

java - Spring Boot不会在MySQL中创建表

java - JAXBElement 优于 ArrayList?

java - 自定义 Textview 字体不起作用

java - 传递给子 Activity 时,Bundle 变为 null

java - 使用备忘录模式(和命令)存储复杂对象的状态