Java區域性變數final
阿新 • • 發佈:2018-11-09
區域性變數和形參帶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);
}
}