学点编译原理,常量传播(或者说常量折叠),基本类型的常量值直接用值代替。 final int i=1; byte b=i; 这句话中i为常量,在后面用到i的地方直接用1来替换,所以byte b = i;就处理为b=1;了,所以没有问题。
int i=1; byte b=i; i为int型变量,不能赋给byte的类型b final int i=1; byte b=i; 此时i 前面有 final修饰 变为常量, 1 可以赋给byte
加了final ,i就成了常量,后面i就是1,而不是变量
int比byte大 final int i=1; byte b=i;这句话改成final int i=129; byte b=i;也是通不过的 用变量会造成可能改变他的值后byte放不下所以要用常量。并且值范围在byte范围之内才行 如果反过来 byte i=1;int b = i; 则没有这样的问题。 其实是jvm编译时向上转型个人理解
final int i=1; byte b=i;
这句话中i为常量,在后面用到i的地方直接用1来替换,所以byte b = i;就处理为b=1;了,所以没有问题。
final int i=1; byte b=i; 此时i 前面有 final修饰 变为常量, 1 可以赋给byte
final int i=1; byte b=i;这句话改成final int i=129; byte b=i;也是通不过的
用变量会造成可能改变他的值后byte放不下所以要用常量。并且值范围在byte范围之内才行
如果反过来 byte i=1;int b = i; 则没有这样的问题。
其实是jvm编译时向上转型个人理解