java - 这个最终的整数变量初始化有什么问题?
问题描述
我尝试了这段代码并进行了很多更正。但我找不到为什么它是非法的。从理论上解释什么是错误的?
class Example{
public static void main(String args[]){
final int y;
y=100;
byte b;
b=y;
}
}
解决方案
我猜你在问为什么那个代码给你
Example.java:6:错误:不兼容的类型:从 int 到 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
在它是初始化程序时作为编译时常量处理,而不是在它是赋值的值时处理。
推荐阅读
- visual-studio-code - 最新更新后 vscode 甚至没有启动
- python - 我们如何从两个不同的文件夹中读取相应的图像?
- python - 使用 bs4 和 Python 进行网页抓取
- amazon-web-services - Cloudformation 模板:Cloudfront DomainName WebsiteURL 返回错误
- python - 创建 python 环境模块需要遵循哪些步骤?我正在尝试在 Windows 10 上执行此操作
- jquery - 将多个 textarea 输入合并到一个 textarea 并使其可使用 jQuery 进行编辑
- jenkins - 没有方法签名:collectLogs.call() 适用于参数类型
- json - 如何在 Delphi 10.1 berlin 中将嵌套对象转换为 Json
- list - 从两个不同大小的列表创建对列表
- python - 如何在 Python 中格式化对 Spotify Web API 的 GET 请求?