1. 程式人生 > 實用技巧 >java關鍵字final(巨集)

java關鍵字final(巨集)

java關鍵字final(巨集)

final是java中的一個關鍵字,可以修飾類,成員變數,區域性變數,方法,表示不可變。
當final修飾一個變數的時候,已經為該變數指定了初始值,那麼這個變數在編譯的時候就已經確定了下來,那麼這個final變數就相當於c語言中的巨集變數,編譯器會把程式中的所有用到該變數的地方替換成為該變數的值

class Test{
	public static void main(String[] args) {
		String s1 = "helloworld";
		String s2 = "hello" + "world";
		System.out.println(s1==s2);
		// String s3 = "hello";
		// String s4 = "world";
		final String s3 = "hello";
		final String s4 = "world";
		String s5 = s3+s4;
		System.out.println(s5==s1);

	}
}

上述程式中,如果s3與s4不新增final,那麼s5 == s1就會輸出false,但是如果s3與s4添加了final修飾詞,那麼s5 == s1就會輸出true
原因是因為:
java使用常量池來管理曾經使用過的字串直接量,例如執行String s1 = "helloworld"之後,系統的常量池中就會快取一個字串"java",如果這個時候程式再次執行String b = "helloworld"後,系統就會將String b直接指向常量池中的"java"字串,因此s1 == s2會返回true
對於s5,如果s3與s4不新增final,那麼s3與s4就是兩個普通的變數,編譯器不會進行"巨集替換",因此編譯器無法確定s5的值,就無法將⬆s5指向常量池中的快取,所以s5 == s1輸出false

執行結果如下