作者qrtt1 (null)
站内java
标题Re: [J2SE] Java String观念请教?
时间Thu May 1 15:38:33 2008
唔, 弟对考试的题目比较没兴趣: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
1F:推 AI3767:astore_1看来发生在s变数的assignment,method内也只有1个变 05/01 16:30
2F:推 AI3767:数最大需求在做运算,所以才用到1个变数区 05/01 16:33
3F:推 jtmh:其实要算 String 物件被建立次数的话应该要算 new 的个数。 05/02 00:01
4F:推 Lordaeron:这些是哪个组译器的assembly code? 05/02 16:53
5F:→ qrtt1:sun的 05/02 18:11