在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ java中String對象聲明的問題

java中String對象聲明的問題

String aaa=new String("123");
String bbb="123";

這兩種聲明方法有什么區(qū)別?難道后者沒有創(chuàng)建一個String對象?

回答
編輯回答
無標題

有一定的區(qū)別,如果沒有特殊需求,也沒有用到new String("123") 的需求。

String str1="ABC"; 和String str2 = new String("ABC");

String str1="ABC" 可能創(chuàng)建一個對象或者不創(chuàng)建對象,如果"ABC"這個字符串在java String池里不存在,會在java String池創(chuàng)建這個一個String對象("ABC").如果已經存在,str1直接reference to 這個String池里的對象。

String str2 = new String("ABC") 至少創(chuàng)建一個對象,也可能兩個。因為用到new 關鍵字,會在heap創(chuàng)建一個 str2 的String 對象,它的value 是 "ABC".同時,如果"ABC"這個字符串在java String池里不存在,會在java String池創(chuàng)建這個一個String對象("ABC").

2018年3月26日 03:20
編輯回答
默念
這兩行代碼的字節(jié)碼指令如下
 public static void main(java.lang.String[]);
   Code:
      0: new           #2                  // class java/lang/String  創(chuàng)建一個String對象,并且其引用進棧
      3: dup
      4: ldc           #3                  // String 123    將String型常量值從常量池中推送至棧頂
      6: invokespecial #4                  // Method java/lang/String."<init>":   調用String構造方法 public String(String original) 
Ljava/lang/String;)V
      9: astore_1                         
     10: ldc           #3                  // String 123    將String型常量值從常量池中推送至棧頂
     12: astore_2
     13: return
     這就是他們的區(qū)別。
2017年4月12日 08:45