当前位置:编程学习 > JAVA >>

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,编译不通过 --------------------编程问答--------------------
引用 2 楼 a470577391 的回复:
这只是改变了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,编译不通过

看错了。。。 --------------------编程问答--------------------
引用 1 楼 fudongrifdr 的回复:
你哪改变e的值了?e=e+1你这样试试?

e+=(e+1);编译报错,
System.out.println("这是static final e+1="+(e+1));这句话也应该报错的 --------------------编程问答--------------------
引用 4 楼 u010519674 的回复:
Quote: 引用 1 楼 fudongrifdr 的回复:

你哪改变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,他为什么要报错? --------------------编程问答--------------------
引用 5 楼 fudongrifdr 的回复:
Quote: 引用 4 楼 u010519674 的回复:

Quote: 引用 1 楼 fudongrifdr 的回复:

你哪改变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的值吗? --------------------编程问答--------------------
引用 7 楼 fudongrifdr 的回复:
你1+2会改变1的值吗?

明白了,谢谢 --------------------编程问答-------------------- e+1=5,e怎么改变了?那是e+1=5,而不是e=5,e如果变了,不是4了,e+1能等于5吗,怎么想的? --------------------编程问答-------------------- --------------------编程问答--------------------
引用 7 楼 fudongrifdr 的回复:
你1+2会改变1的值吗?

这个比喻经典,刚好解释这个 --------------------编程问答--------------------
引用 8 楼 u010519674 的回复:
Quote: 引用 7 楼 fudongrifdr 的回复:

你1+2会改变1的值吗?

明白了,谢谢
e++ 的话,才会改变e的值,而且LZ,你的结贴率为0啊。。。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,