java 常量表达式

原文地址:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28

这是我翻译的,以备不时之用。

常量表达式是一个代表基本数据类型或者String数据类型的表达式,是在编译期间能计算出来的值.由以下几点组成:

  • 基本数据类型或者String数据类型的字面值
  • 转换成基本数据类型或者String(这点不是很理解)
  • 一元操作符:+,-,~,and,!(但不包括++or--)
  • 乘法操作符: *,/
  • 移位运算符: <<,>>和>>>
  • 关系操作符: <,<=,>,>=
  • 比较操作符: ==,!=
  • 位运算符和逻辑操作符 : &,^.|
  • 条件与和条件或操作符: &&,||
  • 三元运算符 :  ? :
  • 带括号的表达式, 这个括号里面的内容是一个常量表达式
  • 简单的变量名, 引用的是一个常量表达式 final int x = 0 ; y = x ;//这个x就是简单变量名
  • 类型名.变量名, 引用的是一个常量表达式 Math.PI

String类型的常量表达式往往通过interned()方法来保证唯一性, 所以String类型往往是interned(这个不知道该怎么描述)

//个人理解, 如有不正确的地方, 欢迎指出

时间: 2024-10-13 13:31:59

java 常量表达式的相关文章

java编译器对string常量表达式的处理和优化

首先把问题摆出来,先看这个代码 String a = "ab";  String b = "a" + "b";  System.out.println((a == b)); 打印结果会是什么?类似这样的问题,有人考过我,我也拿来考过别人(蛮好玩的,大家也可以拿来问人玩),一般答案会是以下几种: 1.true     "a" + "b" 的结果就是"ab",这样a,b都是"ab&

java常量池

java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间.常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间.    String类也是java中用得多的类,同样为了创建String对象的方便,也实现了常量池的技术.    测试代码如下: public class Test{ public static void main(String[] args){ //

【转载】Java常量池

本篇随笔为转载,原贴地址:Java常量池理解与总结. (其实Java的常量池有点像C++中的存储字符串常量的常量存储区). 一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,

Java常量字符串String理解 String理解

以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "equals" 3.String  类不可更改 String 使用非常方便,因此一般涉及字符串时都用该类进行字符串处理至于String类的类在机制,则极少去探究. 直到读到下面这个例子. class X{     public static String strX="hello";}class Y{   public 

Android studio常量表达式的错误

今天在AS上集成Zxing的库,出现了如下的错误: 常量表达式的错误 这个错误是switch case的问题,提示换成if else 在AS中我们使用Alt+Enter(opt+Enter for Mac)快捷键直接将switch转换为if else,如下图所示: 在Tools Android的网站上有详细的说明,主要是避免多个库之间出现资源冲突 Non-constant Fields in Case Labels In a regular Android project, constants

java三元表达式编程规范问题

package day01; public class Program { public static void main(String[] args) {        // TODO Auto-generated method stub    char x='x';      int i=10;    System.out.println(false?i:x);    System.out.println(false?10:x);    /*第一个因为i是一个变量,因此,第一个输出x被提升为

Java之四 表达式和流程控制

q    运算符和表达式的概念 q    运算符总结 q    运算符和表达式的示例 q    布尔运算 运算符和表达式的概念 运算符表示对操作数所进行的运算. 按操作数的数目来分,可分为如下3类: 一元运算符 (如 ++,--) 二元运算符 (如 +,-,*,/) 三元运算符 (如 ?:) 按照运算符功能来分,基本的运算符主要分为下面几类: 算术运算符 (+,-,*,/,%,++,--) 关系运算符 (>,<,>=,<=,==,!=) 布尔逻辑运算符 (!,&&,

Java 条件表达式结果的隐式转换

public class IN0102 { public static void main(String[] args) { int a = 'a'; System.out.println(a);//97 float f = (float) 3.2; float sum =1.5f; int num=2; System.out.println((sum<2?1:num/sum));//1.0 System.out.println("-----------------------------

触摸java常量池

转:http://www.cnblogs.com/dreamroute/p/5946272.html java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下. 理论 小菜先拙劣的表达一下jvm虚拟内存分布:      程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂.      本地方法栈是jvm调用操作系统方法所使用的栈.      虚拟机栈是jvm执行java代码所使用的栈.      方法区存放了一些常量.静