这个最终的整数变量初始化有什么问题?
What is wrong in this final integer variable initialization?
我尝试了这段代码并进行了大量的重新更正。但我找不到为什么 illegal.Exlain 理论上有什么问题?
class Example{
public static void main(String args[]){
final int y;
y=100;
byte b;
b=y;
}
}
我猜你是在问为什么那个代码给你
Example.java:6: error: incompatible types: possible lossy conversion from int to byte
b=y;
^
但这段代码没有:
class Example{
public static void main(String args[]){
final int y=100; // <=======
byte b;
b=y;
}
}
原因是,如果您不提供该值作为初始值设定项(稍后通过赋值对其进行分配),编译器不会将其视为编译时常量,因此不知道该值将适合 byte
。部分原因是因为要将其视为编译时常量,编译器必须处理您这样做的可能性:
class Example{
public static void main(String args[]){
final int y;
if (Math.random() < 0.5) {
y=100;
} else {
y=1000;
}
byte b;
b=y;
}
}
因此编译器仅在 100
是初始化程序时将其作为编译时常量处理,而不是在它是赋值时处理。
我尝试了这段代码并进行了大量的重新更正。但我找不到为什么 illegal.Exlain 理论上有什么问题?
class Example{
public static void main(String args[]){
final int y;
y=100;
byte b;
b=y;
}
}
我猜你是在问为什么那个代码给你
Example.java:6: error: incompatible types: possible lossy conversion from int to byte
b=y; ^
但这段代码没有:
class Example{
public static void main(String args[]){
final int y=100; // <=======
byte b;
b=y;
}
}
原因是,如果您不提供该值作为初始值设定项(稍后通过赋值对其进行分配),编译器不会将其视为编译时常量,因此不知道该值将适合 byte
。部分原因是因为要将其视为编译时常量,编译器必须处理您这样做的可能性:
class Example{
public static void main(String args[]){
final int y;
if (Math.random() < 0.5) {
y=100;
} else {
y=1000;
}
byte b;
b=y;
}
}
因此编译器仅在 100
是初始化程序时将其作为编译时常量处理,而不是在它是赋值时处理。