जब आप int जैसे आदिम के साथ एक स्ट्रिंग को संयोजित करते हैं, तो यह ऑटोबॉक्स मान पहले होता है।जावा में स्ट्रिंग कंसटेनेशन और ऑटोबॉक्सिंग
पूर्व।
String string = "Four" + 4;
यह कैसे जावा में एक स्ट्रिंग के लिए मूल्य में परिवर्तित करता है?
जब आप int जैसे आदिम के साथ एक स्ट्रिंग को संयोजित करते हैं, तो यह ऑटोबॉक्स मान पहले होता है।जावा में स्ट्रिंग कंसटेनेशन और ऑटोबॉक्सिंग
पूर्व।
String string = "Four" + 4;
यह कैसे जावा में एक स्ट्रिंग के लिए मूल्य में परिवर्तित करता है?
देखने के लिए क्या जावा कम्पाइलर का उत्पादन यह हमेशा javap -c
उपयोग करने के लिए वास्तविक बाईटकोड उत्पादित दिखाने के लिए उपयोगी है:
उदाहरण के लिए निम्नलिखित जावा कोड:
String s1 = "Four" + 4;
int i = 4;
String s2 = "Four" + i;
निम्नलिखित बाईटकोड उत्पादन होगा:
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
इस से हम देख सकते हैं:
"Four" + 4
के मामले में, जावा (मैं JDK 6 का उपयोग किया गया था) के लिए पर्याप्त चतुर अनुमान है कि यह एक निरंतर है था, इसलिए क्रम में कोई कम्प्यूटेशनल प्रयास, वहाँ है के रूप में स्ट्रिंग संकलन समय"Four" + i
के मामले में, बराबर कोड new StringBuilder().append("Four").append(i).toString()
जावा कंपाइलर वास्तव में StringBuilder
बनाता है और append()
विधि को आमंत्रित करता है। यह बाइट-कोड में देखा जा सकता है:
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]
फिर भी, व्यवहार मुक्केबाजी के समान और उसके बाद लागू toString()
है: "Four" + new Integer(4).toString()
- जो मेरा मानना है कि क्या भाषा डिजाइनरों मन में था।
(1) सटीक होना, संकलक पहले से ही स्ट्रिंग शाब्दिक और एक एकल स्ट्रिंग शाब्दिक "Four4"
को पूर्णांक शाब्दिक concatting है। आप बाइट-कोड में निम्न पंक्ति में बाइट कोड में देख सकते हैं:
0 ldc <String "Four4"> [19]
अनुसार http://jcp.org/aboutJava/communityprocess/jsr/tiger/autoboxing.html को, autoboxing आदिम प्रकार पर किया जाता है, जब भी एक संदर्भ प्रकार की जरूरत है (जैसे कि इस मामले में पूर्णांक वर्ग के रूप में)
तो int इंटीजर में परिवर्तित हो जाएगा, तो पूर्णांक ऑब्जेक्ट टूस्ट्रिंग() विधि को कॉल किया जाता है और इसका परिणाम पिछली स्ट्रिंग में जोड़ा जाता है।
आप किस भाषा का उपयोग कर रहे हैं? [स्ट्रिंग concat] [1] [1]: – skunkfrukt
मेरे लिए – TeaOverflow
अगर आपके यहाँ देखो, सी # के बारे में बात जावा की तरह लग रहा http: // stackoverflow।कॉम/प्रश्न/33 9 8604/स्ट्रिंग-स्ट्रिंग-इंट-व्हाट्स-बैक-द-सीन-सी – meirrav