static final有点疑惑,大神帮忙解答下
public class TestStatic {static final int e;
public static void main(String[] args){
System.out.println("这是static final e="+e);
System.out.println("这是static final e+1="+(e+1));
}
static {e = 4;}
能编译通过,也能输出,
static final一块使用修饰变量,不是一旦赋值结果无法改变吗? --------------------编程问答-------------------- 你哪改变e的值了?e=e+1你这样试试? --------------------编程问答-------------------- 这只是改变了e的值,他的引用并没有变
如果
public class TestStatic {
static final Integer e;
public static void main(String[] args){
System.out.println("这是static final e="+e);
e = new Integer(3);
System.out.println("这是static final e+1="+(e+1));
}
static {e = 4;}
这样才算改变了e,编译不通过 --------------------编程问答--------------------
看错了。。。 --------------------编程问答--------------------
e+=(e+1);编译报错,
System.out.println("这是static final e+1="+(e+1));这句话也应该报错的 --------------------编程问答--------------------
谁跟你说这句应该报错,e是e,e+1是e+1,你又没把e+1的值赋给e,他为什么要报错? --------------------编程问答--------------------
你哪改变e的值了?e=e+1你这样试试?
e+=(e+1);编译报错,
System.out.println("这是static final e+1="+(e+1));这句话也应该报错的
谁跟你说这句应该报错,e是e,e+1是e+1,你又没把e+1的值赋给e,他为什么要报错?
e+1 不是已经改变e的值? --------------------编程问答-------------------- 你1+2会改变1的值吗? --------------------编程问答--------------------
你1+2会改变1的值吗?
明白了,谢谢 --------------------编程问答-------------------- e+1=5,e怎么改变了?那是e+1=5,而不是e=5,e如果变了,不是4了,e+1能等于5吗,怎么想的? --------------------编程问答-------------------- --------------------编程问答--------------------
你1+2会改变1的值吗?
这个比喻经典,刚好解释这个 --------------------编程问答--------------------
你1+2会改变1的值吗?
明白了,谢谢
补充:Java , Java SE