Re: [J2SE] Java String觀念請教?

看板java作者 (null)時間17年前 (2008/05/01 15:38), 編輯推噓4(401)
留言5則, 4人參與, 最新討論串4/6 (看更多)
唔, 弟對考試的題目比較沒興趣: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
astore_1看來發生在s變數的assignment,method內也只有1個變
05/01 16:30, 1F

05/01 16:33, , 2F
數最大需求在做運算,所以才用到1個變數區
05/01 16:33, 2F

05/02 00:01, , 3F
其實要算 String 物件被建立次數的話應該要算 new 的個數。
05/02 00:01, 3F

05/02 16:53, , 4F
這些是哪個組譯器的assembly code?
05/02 16:53, 4F

05/02 18:11, , 5F
sun的
05/02 18:11, 5F
文章代碼(AID): #186NDw21 (java)
文章代碼(AID): #186NDw21 (java)