Po połączeniu łańcucha z elementem pierwotnym, takim jak int, należy najpierw podać wartość.Łączenie ciągów i Autoboxing w Javie
np.
String string = "Four" + 4;
Jak to przekonwertować wartości ciągu w Java?
Po połączeniu łańcucha z elementem pierwotnym, takim jak int, należy najpierw podać wartość.Łączenie ciągów i Autoboxing w Javie
np.
String string = "Four" + 4;
Jak to przekonwertować wartości ciągu w Java?
Aby zobaczyć, co kompilator Javy produkuje zawsze jest przydatne do korzystania javap -c
pokazać rzeczywistą kodu bajtowego Produkcja:
Na przykład następujący kod Java:
String s1 = "Four" + 4;
int i = 4;
String s2 = "Four" + i;
da następujący kod bajtowy:
0: ldc #2; //String Four4
2: astore_1
3: iconst_4
4: istore_2
5: new #3; //class java/lang/StringBuilder
8: dup
9: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
12: ldc #5; //String Four
14: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
17: iload_2
18: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
21: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
24: astore_3
25: return
Z tego możemy zobaczyć:
"Four" + 4
, kompilator Javy (używałem JDK 6) był na tyle sprytny, aby wywnioskować, że jest to stała, więc nie ma obliczeniowa wysiłek w czasie wykonywania, ponieważ ciąg jest łączony w czasie kompilacji"Four" + i
, równoważny kod to new StringBuilder().append("Four").append(i).toString()
Kompilator java faktycznie tworzy StringBuilder
i wywołuje metodę append()
. Można zauważyć w bajtowego kodu:
22 invokespecial java.lang.StringBuilder(java.lang.String) [40]
...
29 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [47]
32 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [51]
Mimo to zachowanie jest identyczne jak boks, a następnie powołując toString()
: "Four" + new Integer(4).toString()
- co wierzę, co projektanci język miał na myśli.
(1) Ściślej The kompilator już concatting łańcuch dosłownym INT dosłownym do jednego łańcuch znaków "Four4"
. Można zobaczyć go w kodu bajtowego w poniższej linii w bajtowego kodu:
0 ldc <String "Four4"> [19]
Według http://jcp.org/aboutJava/communityprocess/jsr/tiger/autoboxing.html, autoboxing odbywa się na prymitywnej typu ilekroć jest potrzebna rodzaj odniesienia (takie jak klasy Integer w tym przypadku)
Więc int zostanie zamienione na liczbę całkowitą, a następnie liczba całkowita obiektów object toString() zostanie wywołana, a jej wynik zostanie dodany do poprzedniego ciągu.
W jakim języku się posługujesz? – skunkfrukt
Wygląda Java mi – TeaOverflow
jeśli mówimy o C#, zajrzeć tutaj: [ciąg concat] [1] [1]: http: // stackoverflow.com/questions/3398604/string-string-int-whats-behind-the-scene-c – meirrav