JAVA语言之分析 Java Compile-time Constant(编译时常量)问题
小标 2018-12-19 来源 : 阅读 560 评论 0

摘要:本文主要向大家介绍了JAVA语言之分析 Java Compile-time Constant(编译时常量)问题,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之分析 Java Compile-time Constant(编译时常量)问题,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


前言


最近被这个概念迷惑住了,翻看中文博客大多没有讲的太清楚,最后多方查阅终于搞清楚,特此记录,希望对别人有帮助。


编译时常量定义是否一定需要static修饰?


如果你看别人写的编译时常量例子,很多人都会这样定义:


public static final int variale = 1;

   


那么这里的static是否为必需的呢?


其实,final为必需,static为非必需。如果你懂得了编译器对编译时常量的处理,就会知道final为必需是有原因的,而static并没有什么特殊原因一定要写。


编译器对于检测到的编译时常量进行这样的处理:将所有出现该编译时常量的地方直接替换为该变量声明时赋给的值。


   

final int var = 1; //compile-time constant

 

int another = var; //等效于int another = 1;

   


那么要求用final修饰的意义就很明显了。如果不用final修饰,变量在程序后续部分改变了它最初的值,但是编译器这时候早已将所有出现该变量的地方替换为它最初的值,那么该变量值的改变便是无意义的。


int var = 1; //假设var为编译时常量

int another = var;

var = 2;

int another1 = var; //程序员原意这里应该为another1 = 2;

/*如果var按编译时常量处理,上述代码等效于*/

int var = 1;

int another = 1;

var = 2;

int another1 = 1;

   


变量成为编译时常量的四个条件


使用final修饰 变量必须为基本类型或String类型 变量必须在声明的同时进行赋值 对变量进行赋值的必须为常量表达式(constant expression)


常量表达式(Constant expression)


对于常量表达式,你可以这样快速记忆:它是一个不包括自增自减运算符,不包括instanceof运算符和任何方法调用的表达式(注:常量表达式可以是常量的引用)。


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程