我理解正确吗
字节 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的问题
'...编译器类型检查值是否属于数据类型(字节)范围内 好的,那么JVM分配内存并保留该值? ...'
值 40 是一个 int 文字,因此编译器将评估声明的 data-type 是否可以包含它。
换句话说,以下内容将无法编译。
byte b =1234;
'...编译器知道数据类型和值常量,因此编译器将进行比较并将值赋给变量“a”??那么jvm在这种情况下不分配内存吗? ...'
如果您提供的值可以在范围内,它只会为 byte 分配内存。
意思是,以下内容将编译。
byte a = 10<20?30:1234;
'...编译器不知道值 a,b 只进行类型检查 datatypes(int)-第一行 ...
...我不知道我在哪里理解正确为什么数字 20(false) 不能分配给字节...'
译者不会讲得太深。
我想如果你提供一个动态值,它不会评估任何东西。
或者,您可以将 a 和 b 声明为 final,尽管我不确定这有多实用。
final int a =30,b=20;
byte c= (a<b)?10:20;