在Java中,用final修饰的变量只能赋值一次,之后不能再被重新赋值,而且被修饰的变量变成了常量。
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 1 + 2;
int d = a + b;
}
}
对上面的代码编译之后的class文件进行反编译,结果如下:
编译器会对常量的运算进行优化,因此c=1+2在编译过后直接变成c=3,而d=a+b由于是两个变量相加,因此不会被优化。
将上述代码进行修改:
public class Test {
public static void main(String[] args) {
final int a = 1;
final int b = 2;
int c = 1 + 2;
int d = a + b;
}
}
反编译之后结果为:
d=a+b被优化为了d=3,编译器认为被final修饰的变量a b是两个常量,因为它们不能被修改。