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一块使用修饰变量,不是一旦赋值结果无法改变吗?

解决方案 »

  1.   

    你哪改变e的值了?e=e+1你这样试试?
      

  2.   

    这只是改变了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,编译不通过
      

  3.   

    e+=(e+1);编译报错,
    System.out.println("这是static final e+1="+(e+1));这句话也应该报错的
      

  4.   

    e+=(e+1);编译报错,
    System.out.println("这是static final e+1="+(e+1));这句话也应该报错的
    谁跟你说这句应该报错,e是e,e+1是e+1,你又没把e+1的值赋给e,他为什么要报错?
      

  5.   

    e+=(e+1);编译报错,
    System.out.println("这是static final e+1="+(e+1));这句话也应该报错的
    谁跟你说这句应该报错,e是e,e+1是e+1,你又没把e+1的值赋给e,他为什么要报错?e+1 不是已经改变e的值?
      

  6.   

    e+1=5,e怎么改变了?那是e+1=5,而不是e=5,e如果变了,不是4了,e+1能等于5吗,怎么想的?
      

  7.   

    明白了,谢谢e++ 的话,才会改变e的值,而且LZ,你的结贴率为0啊