1. 程式人生 > >Java區域性變數final

Java區域性變數final

區域性變數和形參帶final。

在一個執行緒A中開起另一個執行緒B,如果執行緒B要使用執行緒A的區域性變數,那麼A的區域性變數需要定義成final。理由:區域性變數是執行緒內部共享的,每一個執行緒內的不能訪問其他執行緒的區域性變數,但是上訴的情況卻違背了這一原則,那麼加上final為什麼就可以了呢?原因是加上final之後,在建立B執行緒的時候會把final標記的變數作為執行緒B的構造方法的引數傳給B,如此一來就解決了此問題,這是一個比較巧妙的做法,通過class檔案反編譯可以看出這個道理。

另外Java的String變數比較特殊,他所定義的變數的值全部都存放在常量池裡面,不管是不是final的。下面的結果全部為true。並且如果相等都指向同一個地址。

基本型別的區域性變數如果值相同也都指向同一個地址。只有後面的和前面的不想等的時候才會指向新的地址,這就是為什麼基本區域性變數相互之間不會影響的原因。

public class StringTest {
    private static String s1 = "123";
    static final String s2 = "123";
     
    public static void main(String[] args) {
        String s3 = "123";
        final String s4 = "123";
        System.
out.println(s1 == s2); System.out.println(s3 == s4); System.out.println(s1 == s3); } }