八股文——JAVA基础:常量折叠是什么?

常量折叠是jvm在底层进行常量的基本运算,比如

String s = "hello" + "world";  // 编译时直接折成 "helloworld"

再比如:

public class C {
  public static final String A = "he";
  public static final String B = "llo";
  public static final String C = A + B;  // 也会在编译时折成 "hello"
}

String str1 = "he";    // 普通局部变量,不是 compile-time constant
String str2 = "llo";
String str3 = "world";

// 这里 str1、str2、str3 都是变量,编译器无法在编译期把它们的值“提取”出来
String str4 = str1 + str2 + str3;

需要注意,由于字符串String的操作符+被重载了,所以才能进行常量折叠,因此String只有+的常量折叠,而对于八大基本数据类型没有这样的限制,比如:

// 以下都是编译期常量表达式,编译后直接折叠为字面量
int    x = 1 + 2 * 3;       // 折叠成 int x = 7;
long   L = 100L / 4;        // 折叠成 long L = 25L;
float  f = 2.5f  + 4.5f;    // 折叠成 float f = 7.0f;
double d = 3.0  - 1.1;      // 折叠成 double d = 1.9;
char   c = 'A' + 2;         // 折叠成 char c = 'C';
byte   b = (byte)(1 + 2);   // 折叠成 byte b = 3;
short  s = (short)(10 - 4); // 折叠成 short s = 6;
boolean t = true && false;  // 折叠成 boolean t = false;

你可能感兴趣的:(java,开发语言)