今天听一个java报告,有人说java里隐式转换只能是常量,对不?各位大侠byte b = 111;
int k = 222
byte c ?= k;

解决方案 »

  1.   

    说java里隐式转换只能是常量的人是垃圾!byte b = 111;的解释:
    1. 111 不叫常量,叫做字面量。字面量没有类型的。
    2. final byte b = 111; 这个b才是常量。
    3. byte b = 111; 因为111是字面量,没有类型。所以不存在隐式转换。
    4. byte b = 278; 在用字面量对变量赋值的时候,编译器会进行范围校验,所以这个语句会报错。int k = 222;
    byte c = k;
    1. 很多运算符,要求运算数具有相同的类型。赋值运算符就是这样的运算符。如果运算数不同,复制运算符会提升右边的运算数,使右边的和左边的类型一样(这就是隐式转换)。如果提升失败,就会抛出错误。
    2. byte c = k; 这会抛出编译期错误的。byte c = (byte)k;这样才对。
    3. int k = b; 这样就会进行隐式转换。
      

  2.   

    byte b = 1;
    int n = b;可以的。
      

  3.   


    整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级:
    低----------------------------------------------------->高
    byte,short,char—> int —> long—> float —> double
      

  4.   

    答:唉...,错误理解一大堆.
    1)谁说"字面量没有类型的"?
    111当然是int,而111L是long
    因此:
    byte b=111;//正确
    byte b=111L;//错误
    这是什么原因?
    JAVA特别的规定:若字面量(即:文字量)是int,但其值的范围在byte之内,可以直接赋值.
    即:byte b=111;是可以直接赋值,而不用写成:byte b=(byte)111;2)另外static final常量也可以.
      如:
     static final A=126;
     是: byte b=A;//可以的
    若是(非static 型final): final A=126;
     则不可以.即:bye b=new Myest().A;//不可以.3)变量当然不可以了.
      int a=126;
      byte b=a;//不可以