栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Java编译器不理解此变量总是初始化的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Java编译器不理解此变量总是初始化的?

它与编译器如何确定是否执行语句有关。它在JLS#16中定义:

每个局部变量和每个空白的final字段在对其值进行任何访问时都必须具有一个明确分配的值。

在您的情况下,编译器无法确定

y
已被明确分配,并给您一个错误。这是因为它将需要确定条件始终为真,并且仅当中的条件
if
常量表达式时 才有可能。

JLS#15.28定义
常量表达式

编译时常量表达式是表示原始类型或String的值的表达式,该值不会突然完成,并且仅使用以下内容组成:

  • […]
  • 引用常量变量(第4.12.4节)的简单名称(第6.6.5.6.1节)。

该JLS#4.12.4定义
常量变量 为:

最终类型并使用编译时常量表达式初始化的基本类型或String类型的变量称为常量变量。

在您的情况下,

final int x = 101;
是一个常量变量,但
final int x; x = 101;
不是。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号