java中的三元运算符 - 从编译器和jvm角度不理解

问题描述 投票:0回答:1

我理解正确吗

字节 b =40;

编译器类型检查值是否属于数据类型(字节)范围内 好的,然后JVM分配内存并保留该值?

如果我理解正确的话,我的戏剧就在三元运算符中

字节a = 10<20?30:40;

编译器知道数据类型和值常量,因此编译器将进行比较并将值赋给变量“a”??那么jvm在这种情况下不分配内存吗?

第二个例子

int a =30,b=20;

字节c=(a

编译器不知道值 a,b 只对 datatypes(int)-第一行进行类型检查,

第二行编译器知道值10和20,但是比较将由JVM完成(jvm知道值?)所以jvm来进行比较并将数字10和20提升为int类型?所以这个数字不能分配给byte变量?...我不知道我在哪里理解正确为什么数字 20(假)不能分配给字节...

谢谢你

讲解运行时编译器类型检查和jvm的问题

java jvm compiler-construction
1个回答
0
投票

'...编译器类型检查值是否属于数据类型(字节)范围内 好的,那么JVM分配内存并保留该值? ...'

40 是一个 int 文字,因此编译器将评估声明的 data-type 是否可以包含它。

换句话说,以下内容将无法编译。

byte b =1234;

'...编译器知道数据类型和值常量,因此编译器将进行比较并将值赋给变量“a”??那么jvm在这种情况下不分配内存吗? ...'

如果您提供的值可以在范围内,它只会为 byte 分配内存。

意思是,以下内容将编译。

byte a = 10<20?30:1234;

'...编译器不知道值 a,b 只进行类型检查 datatypes(int)-第一行 ...

...我不知道我在哪里理解正确为什么数字 20(false) 不能分配给字节...'

译者不会讲得太深。
我想如果你提供一个动态值,它不会评估任何东西。

或者,您可以将 ab 声明为 final,尽管我不确定这有多实用。

final int a =30,b=20;

byte c= (a<b)?10:20;
© www.soinside.com 2019 - 2024. All rights reserved.