- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有 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/
我正在使用一个库 - HtmlUnit - 并且我刚刚从版本 2.4 更新到版本 2.5。当我针对 2.5 编译代码时,我收到一条我不熟悉的奇怪对象“无法取消引用”错误消息。此外,我不明白为什么当我用
我有 C 和 C++ 背景,一直认为 Java 中的解引用是通过对象的引用访问对象的过程。 例如“ref”是一个引用,当用于访问它所引用的Integer对象时,它被解引用: Integer r
这个问题已经有答案了: int cannot be dereferenced (3 个回答) 已关闭 9 年前。 我正在编写一个简单的 Java 程序来进行温度转换,并且在第 8 行(我已在下面的代码
请在说明中包含一个示例。 最佳答案 回顾基本术语 通常情况下就足够了 - 除非您正在编写程序集 - 设想一个 指针包含一个数字内存地址,其中 1 表示进程内存中的第二个字节,2 表示第三个字节,3 表
本题将从草稿N1570中获取信息,所以基本上是C11。 通俗地说,取消引用指针意味着将一元 * 运算符应用于指针。草稿文件中只有一处存在“取消引用”一词(没有“取消引用”的实例),并且位于脚注中: 1
我有这三个文件。使用结构体、函数和指针。 尝试这样做: void getName(Name *) - 接收指向名称的指针并执行操作 联系人.h struct Name { char firstNam
好的,所以我需要生成 7 个 1 到 100 之间的随机数,并将最大值打印在屏幕上。但是,当我编译此代码时: public class ArrayofTemperatures { public
我喜欢代码让我头疼的时候。除了这个。我只是使用一种常用的算法用随机 double 填充一个 vector 。问题是,在编译之后,它给了我一个“Iterator not dereferenceable”
我有 C 和 C++ 背景,一直认为 Java 中的解引用是通过对象的引用访问对象的过程。 例如“ref”是一个引用,当用于访问它所引用的Integer对象时,它被解引用: Integer r
本题将从草稿中抽取信息N1570 ,所以 C11 基本上。 通俗地说,取消引用指针意味着将一元 * 运算符应用于指针。文档草案中只有一个地方存在“取消引用”一词(没有“取消引用”的实例),并且在脚注中
我正在尝试实现一个提供 map 标记动画的库,但是当我尝试添加一些高级方法时,它在第二个“.withFillColor(Color.BLUE)”上抛出一个错误,其中显示:错误: void 无法取消引用
我收到以下代码的“int 无法取消引用”错误。任何帮助表示赞赏。谢谢: public int value() { int total = 0; **for (int i = 0; i < wallet
编译时我似乎收到“错误:int 无法取消引用”错误。我已经查找了发生这种情况的原因,尽管如此,我不确定如何解决它。 public class NetID_BaseballPitcher { S
这是我遇到问题的地方。 double num1 = Math.random(); double num2 = Math.random(); if (num1 < num2.nu
所以,我花了一些时间编写一些计算方法,以便在我正在尝试制作的角色扮演游戏的预览战斗窗口中获取一些导入数字(有人还记得《火焰纹章》吗?这是它的简化版本)。这是我尝试从这些 c 形成 jtable 的地方
我问的问题非常基础,但我试图通过在编译器中做练习来理解 C++ 中指针的行为。因此,例如,我首先声明一个 int 指针 *p 并尝试为其赋予一些值并打印它: #include using names
这里我有一些值,其中两个是整数,我不能对它们调用方法,因为它们不是引用。我该如何解决这个问题? String srcAddr, dstAddr, protocol; int srcPort, dstP
我有以下代码部分,它给出了明确的 null 取消引用。 uint64_t *var1 = NULL; char *var2 = NULL; //Alias transfer var1 = (uint6
在 C 中,是否可以为取消引用的指针定义别名/快捷方式? 即假设定义如下: void * ptr_to_my_variable = 0x2ff00000; 是否可以定义一个对应于 *ptr_to_my
假设我有这样的东西: class Collection { private: typedef std::vector >::iterator Iterator; std::vector
我是一名优秀的程序员,十分优秀!