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


前言

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

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、如果二端都是常量   先查找常量池中有沒有拼接完的 如果有常量池就不會在新建 否則會新建一個常量 但不會在堆中創建新的對象

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM