byte a = 1;
byte b = 1;
byte c = a + b;
Run Code Online (Sandbox Code Playgroud)
引发错误:可能会损失精度
byte subt = a_s - a_b;
^
required: byte
found: int
Run Code Online (Sandbox Code Playgroud)
这种行为是与jvm有关还是在java语言中定义的.
编辑:如果它是用java语言定义然后这样做是因为记住jvm?
表示如果java支持byte
数据类型,那么为什么会operation on byte
产生结果int
我认为任何算术表达式的结果至少是一个int.7/3是一个表达式 - 它有一个运算符(除法).
但为什么编译好呢?
byte b1 = 7 / 3; // 7/3 is not a literal?
short b2 = 7 / 3; // 7/3 is not a literal?
char b3 = 7 / 3; // 7/3 is not a literal?
Run Code Online (Sandbox Code Playgroud)
和f1()编译好吗?
byte f1() {
return 7 / 3; // Why is it allowed? Why isn't 7 / 3 an int ?
}
byte f2(int x) {
return x / 3; // c.ERR - type mismatch
}
byte f3(byte x) { …
Run Code Online (Sandbox Code Playgroud)