. Aşağıdaki bayt koduJava'da son dizelerin birleştirilmesi nasıl yapılır? Bu snippet'i derlediğimde
public static void main(java.lang.String...);
flags: ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
Code:
stack=1, locals=4, args_size=1
0: ldc #16 // String str
2: astore_1
3: ldc #18 // String ing
5: astore_2
6: ldc #20 // String string
8: astore_3
9: return
üretir
public class InternTest {
public static void main(String...strings){
final String str1="str";
final String str2="ing";
String str= str1+str2;
}
}
böylece dize "dize" Bu hatta yığın 6: ldc #20 // String string
aktarıldığında sürekli havuzda zaten orada. JSL
teklif
- son Değişkenler:
ilkel türde bir değişken ya da type, bu son ve bir derleme zamanı sabiti ifadesi ile başlatıldı (§ 15.28), bir sabit değişken olarak adlandırılan 'dur. §15.28 JLS gelen Ayrıca
- constantExpression: String türününDerleme zamanı sabiti ifadelerinde hep "enterne" olan yüzden yöntem String # stajyer kullanarak, birbirinden farklı örneklerini paylaşmak olarak().
Yani ben dizge1 ve str2 oluşturulduktan an staj olacak biliyorum. "Str" ve hat String str= str1+str2;
aynı hafızayı paylaşacak "ing" Ama dizge1 + str2 doğrudan "dizesini" in ürettiği nasıl sabit dize havuzu. final
yazmayınca olduğu gibi herhangi bir String Builder sınıfını çağırmadan.? ben bu pasajı
public class IntermTest {
public static void main(String...strings){
String str1=("str").intern();
String str2=("ing").intern();
String str= str1+str2;
}
}
yazdı Ama bayt kodu oluştururken ben bu
public static void main(java.lang.String...);
flags: ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
Code:
stack=3, locals=4, args_size=1
0: ldc #16 // String str
2: invokevirtual #18 // Method java/lang/String.intern:
()Ljava/lang/String;
5: astore_1
6: ldc #24 // String ing
8: invokevirtual #18 // Method java/lang/String.intern:
()Ljava/lang/String;
11: astore_2
12: new #26 // class java/lang/StringBuilder
15: dup
16: aload_1
17: invokestatic #28 // Method java/lang/String.valueOf
:(Ljava/lang/Object;)Ljava/lang/String;
20: invokespecial #32 // Method java/lang/StringBuilder.
"<init>":(Ljava/lang/String;)V
23: aload_2
24: invokevirtual #35 // Method java/lang/StringBuilder.
append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
27: invokevirtual #39 // Method java/lang/StringBuilder.
toString:()Ljava/lang/String;
30: astore_3
31: return
Nitekim o da için stringBuilder
kullanır var
stajyer şeyler
bir ilgisi var olup olmadığını görmek için birleştirme. Yani final ile bir şeyler yaptı. Kesinlikle farkında olmadığımfinal
Strings hakkında özel bir şey var mı?
şey Bunun cevabı olacağını söylüyor Bir sonraki soru: http://stackoverflow.com/a/19418517/1393766 – Pshemo
@Pshemo bu net ..Ben neyse .. o herhangi bir sorun yol açabilirdi böyle güzel soru için teşekkür sanmıyorum haline gelmiştir zaman .. :) her soru harika bir öğrenme eğrisi! –