【Java语法解析】true,false与null是关键字吗?


语法话题

本期的语法话题为:

true,false与null是关键字吗(保留关键字)?


关键字分类

从Java 17起,关键字分为两种:

  • 保留关键字
  • 上下文关键字

其中,保留关键字指在Java 17前所定义的关键字,例如,if,class等。而上下文关键字指在特定的上下文环境中,会解析为特殊的含义,例如,var,record等。不过,像var,record在Java 17前就已经在使用(具有特殊的含义),只不过官方没有将其称为“上下文关键字”。

本话题中,我们提及的关键字,指的是保留关键字。


结论

在很多集成开发环境中,true,false,null往往使用特殊的颜色高亮显示,这便增加了这三个符号的混淆性,很多Java初学者会认为这三个符号也是关键字。然而,这是错误的。在Java语言中,这三个符号是三个字面常量值。其中,true与false是布尔类型的字面常量,null是引用类型的字面常量。这就好比“abc”是String类型的字面常量,数值“5”是int类型的字面常量一样。


语法解析

如此一来,这三个符号不是很平常了吗?似乎没有必要将其单独列出。也不是,还是有一些差别的。尽管true,false,null不是关键字,但是,也不能将其作为标识符使用,否则同样会产生编译错误。从这一点来说,这三个字面常量与关键字的表现是相似的。

至于true,false与null不能声明为标识符的原因,可以解释如下:

  • 第一,从简单的角度讲,就像其他类型(例如int类型)的字面常量一样,我们不能将数值1或20声明为标识符,因而,也同样不能将布尔类型或引用类型的字面常量(true,false与null)声明为标识符。
  • 第二,从语法的角度讲,编译器在解析符号的时候,对于某一个符号T,如果T同时可以解析为标识符或者字面常量,则总是会解析为字面常量。因此,程序中只要出现true(false或null),则一定会解析为字面常量,而不是标识符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值