说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; 这样就会进行隐式转换。
byte b = 1; int n = b;可以的。
整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级: 低----------------------------------------------------->高 byte,short,char—> int —> long—> float —> double
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; 这样就会进行隐式转换。
int n = b;可以的。
整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级:
低----------------------------------------------------->高
byte,short,char—> int —> long—> float —> double
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;//不可以