Re: [J2SE] Java String觀念請教?
唔, 弟對考試的題目比較沒興趣:P
Compiled from "XD.java"
class XD extends java.lang.Object{
XD();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public java.lang.String foo();
Code:
0: ldc #2; //String Fred
2: astore_1
3: new #3; //class java/lang/StringBuilder
6: dup
7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
10: aload_1
11: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6; //String 47
16: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7; //Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
23: aload_1
24: iconst_2
25: iconst_5
26: invokevirtual #8; //Method
java/lang/String.substring:(II)Ljava/lang/String;
29: astore_1
30: aload_1
31: invokevirtual #9; //Method
java/lang/String.toUpperCase:()Ljava/lang/String;
34: astore_1
35: aload_1
36: invokevirtual #10; //Method
java/lang/String.toString:()Ljava/lang/String;
39: areturn
public static void main(java.lang.String[]);
Code:
0: return
}
反組譯後,看起來 Fred 和 47 都變成常數,先以 StringBuilder 組裝起來
(如果是 5.0 以前就會用 StringBuffer)
而大家比較關心的是 String 是否真的被建立了
看起來應該是從 StringBuilder 被 toString 開始
他們恰好都被放在 1 號變數區運算
所以 count astore_1 有 4 個
如果把 return 也運進去, 那可以 + 1
如果至少可以確定 String.toString() 不會產生 astore_1
XD
考試上的觀念俺並不懂,如果錯了別找我要分 :P
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.80.216
推
05/01 16:30, , 1F
05/01 16:30, 1F
推
05/01 16:33, , 2F
05/01 16:33, 2F
推
05/02 00:01, , 3F
05/02 00:01, 3F
推
05/02 16:53, , 4F
05/02 16:53, 4F
→
05/02 18:11, , 5F
05/02 18:11, 5F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 6 篇):