java中的三进制运算符--从编译器和jvm的Angular 无法理解

5m1hhzi4  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(92)

我理解的对吗
bytes b =40;
检查值是否属于数据类型(字节)范围内,然后JVM分配内存并保留值?
如果我没理解错的话,我的戏剧性的地方是在三元运算符中
字节a = 10<20?30:40;
编译器知道数据类型和值常量,所以编译器会进行比较并将值赋给变量“a”??所以jvm在这种情况下不分配内存?
二示例
int a =30,B=20;
字节c=(a<b)?10:20;
编译器不知道值a,B只做类型检查datasets(int)-第一行,
第二行编译器知道值10和20,但比较将由JVM完成(JVM知道值?)所以JVM来做比较,并将数字10和20提升为int类型??,所以这个数字不能分配给字节变量?.我不知道我在哪里理解正确为什么数字20(假)不能分配给字节.
谢谢你
解释编译器类型检查和jvm在运行时的问题

avwztpqn

avwztpqn1#

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

40 是一个 int literal,因此编译器将评估声明的 data-type 是否可以包含它。
换句话说,下面的代码将无法编译。

byte b =1234;

字符串

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

如果您提供的值可以在范围内,它只会配置 byte 的内存。
意,下面将进行编译。

byte a = 10<20?30:1234;


编译器不知道值a,B只执行类型检查数据类型(int)-第一行...
......我不知道我在哪里正确理解了为什么数字20(错误)不能分配给字节......“*
解释器不会遍历太深。
我想如果你提供一个动态值,它不会评估任何东西。
或者,您也可以将 aB 声明为 final,尽管我不确定这有多实际。

final int a =30,b=20;

byte c= (a<b)?10:20;

相关问题