Java中String的+操作

執行如下的java代碼

		String a = "hello2";
		final String b = "hello";
		String d = "hello";
        String c = b + 2;
        String e = d + 2;

        System.out.println(b == d);
        System.out.println((a == c));
        System.out.println((a == e));

執行結果

true
true
false

原因

加了final修飾後,在編譯時,java會把b當成常量來處理,實際編譯就會變成

		String a = "hello2";
		final String b = "hello";
		String d = "hello";
        String c = "hello" + 2;
        String e = d + 2;
		......

所以a創建後會放入常量池裏,c則是兩個常量拼接,直接從常量池裏找,所以a和c指向同一個地址;而e執行的是變量和常量相加,實際會產生一個stringBuilder對象,會另外分配一塊內存,因此e和a的地址不同,比較結果爲false

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章