int i=1; byte b=i;错! final int i=1; byte b=i;就ok!为什么??

解决方案 »

  1.   

    学点编译原理,常量传播(或者说常量折叠),基本类型的常量值直接用值代替。
    final int i=1; byte b=i;
    这句话中i为常量,在后面用到i的地方直接用1来替换,所以byte b = i;就处理为b=1;了,所以没有问题。
      

  2.   

    int i=1; byte b=i;   i为int型变量,不能赋给byte的类型b
    final int i=1; byte b=i;   此时i 前面有 final修饰  变为常量,  1 可以赋给byte
      

  3.   

    加了final ,i就成了常量,后面i就是1,而不是变量
      

  4.   

    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编译时向上转型个人理解
      

  5.   

    既然129超出了byte的范围,那还有必要把常量i定义成129吗?