1. 程式人生 > >java字符串類型常量拼接與變量拼接的區別

java字符串類型常量拼接與變量拼接的區別

print 常量 java highlight brush ava 地址 light str

前言

首先看下下面代碼結果是什麽?

package cn.demo_01;

public class StringDemo02 {
	public static void main(String[] args) {
		String a = "abc";
		String b = "ab";
		String c = "c";
		System.out.println(a == b + c);
	}
}

在看這個代碼結果是什麽?

package cn.demo_01;

public class StringDemo02 {
	public static void main(String[] args) {
		String a = "abc";
		System.out.println(a == "ab"+"c");
	}
}

第一個例子其結果為false 第二個例子其結果為true 為什麽會這樣? 下面看下內存分布圖:

技術分享圖片

最後得出的結論:

1、+運算符如果一邊是變量的話就會 先查找常量池中有沒有拼接完的 如果有常量池就不會在新建 否則會新建一個常量 最後會在堆中創建一個新的String對象

2、如果二端都是常量 先查找常量池中有沒有拼接完的 如果有常量池就不會在新建 否則會新建一個常量 但不會在堆中創建新的對象

(註:== 間的比較 比較的是內存地址)

java字符串類型常量拼接與變量拼接的區別