java - 在没有双括号的情况下转换引用变量

标签 java

给定以下两个类:

class A {}

class B extends A {
    int b;
}

基于以下运算符优先级表:http://www.cs.bilkent.edu.tr/~guvenir/courses/CS101/op_precedence.html .

运算符 (). 具有相同的优先级,并且它们从左到右求值(关联性)。

A a = new B();
assert (B)a.b == 0;

上面的代码片段应该成功编译并断言,因为首先评估括号运算符(将引用 a 转换为类型 B),然后访问转换引用的 b 返回值 0 的成员变量。

为什么上面的说法不是这样?

最佳答案

您混淆了优先级 15 中的 () 括号( type ) 一元类型转换优先级 13.

. 成员选择优先级为15,高于类型转换,所以(B)a.b表示(B) (a.b),这就是为什么你需要编写 ((B) a).b 来获得你想要的。

part of precedence table

关于java - 在没有双括号的情况下转换引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095047/

相关文章:

java - jvm中 native 代码如何转换为机器代码

java - 您如何编写使用StdAudio在Java中弹奏和弦的方法?

java - 为什么在使用 Class.forName(...) 时会出现 ClassNotFoundException?

java - 改进 Java Soap 客户端

java - 返回值的约定是什么?

java - 在 Java 中构建具有相同元素的列表

java - XMLStreamWriter 删除序言

java - 写入文件的程序中出现 NullPointerException 错误

java - Java 接口(interface)如何模拟多重继承?

java - Spring框架中通过Websocket实时检测离线和在线客户端