1. 程式人生 > >Java中字符串內存位置淺析

Java中字符串內存位置淺析

虛擬 obj ati 加載 code sys 常量池 ted println

String內存位置說明

  1. 顯式的String常量

String a = "holten";
String b = "holten";
  • 第一句代碼執行後就在常量池中創建了一個值為holten的String對象;
  • 第二句執行時,因為常量池中存在holten所以就不再創建新的String對象了。
  • 此時該字符串的引用在虛擬機棧裏面。
  1. String對象

String a = new String("holtenObj");
String b = new String("holtenObj");
  • Class被加載時就在常量池中創建了一個值為holtenObj的String對象,第一句執行時會在堆裏創建new String("holtenObj")對象;
  • 第二句執行時,因為常量池中存在holtenObj所以就不再創建新的String對象了,直接在堆裏創建new String("holtenObj")對象。

驗證一下

/**
 * Created by holten.gao on 2016/8/16.
 */
public class Main {
    public static void main(String[] args){
        String str1 = "高小天";
        String str2 = "高小天";
        System.out.println(str1==str2);//
true String str3 = new String("高大天"); String str4 = new String("高大天"); System.out.println(str3==str4);//false } }

返回結果:

true
false

Java中字符串內存位置淺析