局部變量和形參帶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); } }