我又试了下,代码是这样的:public class Test {
public static void main(String[] args){
byte x='a'+8;//不会报错,why?'a'+8是什么型? byte y=8;
//byte z=y+8;去掉注释会报错,因为y+8是int型
}
}Java只对变量自动转换类型,而不对常量自动转换类型?也不对呀,'a'是2字节常量,x是1字节变量,怎么可以直接赋值?
public static void main(String[] args){
byte x='a'+8;//不会报错,why?'a'+8是什么型? byte y=8;
//byte z=y+8;去掉注释会报错,因为y+8是int型
}
}Java只对变量自动转换类型,而不对常量自动转换类型?也不对呀,'a'是2字节常量,x是1字节变量,怎么可以直接赋值?
System.out.println(c);
你会明白的
两个int相加为int
两个float相加为float
System.out.println("1+1="+1+1);
System.out.println("1+1="+(1+1));
float i=100.0;//报错
float i=100.0f;//正解
char是16位;
byte是8位;
char字符的,是asicll值时不超过byte表示范围,在编译时期用byte值都不报错。
不然就会报错,
byte x = '中'+8;肯定报错;
Java就是这么处理的,别太纠结了。
Java中,字符常量有两种类型:ASCII型和Unicode型,常量具体是那种类型由范围决定,原则是够用就行:如'a'是ASCII型,'中'是Unicode型。'a'+6是ASCII型,'a'+60是Unicode型(隐含有自动类型转换)。字符变量一定是Unicode型。所以,像char x='a';这种语句会有一个自动类型转换,把ASCII型的'a'转换成Unicode型的'a',再赋给变量x。
且Java中,byte型变量运算时会转换成int型
byte型常量如4,123运算时不会自动转换,而456,345这些常量不是byte型常量,而是short型常量,Java中常量类型的判断原则也是“够用就行”,“不够用自动向更高字节类型转换”