না, বেশ না।
প্রথমত, শব্দার্থবিজ্ঞানের মধ্যে কিছুটা পার্থক্য রয়েছে। যদি aথাকে nullতবে a.concat(b)একটি নিক্ষেপ করে NullPointerExceptionতবে এটির a+=bমূল মানটিকে aযেমন ব্যবহার করা হবে তেমন আচরণ করবে null। তদতিরিক্ত, concat()পদ্ধতিটি কেবলমাত্র Stringমানগুলি গ্রহণ করে যখন +অপারেটর নিঃশব্দে আর্গুমেন্টটিকে একটি স্ট্রিংয়ে রূপান্তরিত করে ( toString()বস্তুর জন্য পদ্ধতিটি ব্যবহার করে)। সুতরাং concat()পদ্ধতিটি যা গ্রহণ করে তাতে আরও কঠোর।
ফণা নীচে দেখতে, সঙ্গে একটি সাধারণ ক্লাস লিখুন a += b;
public class Concat {
String cat(String a, String b) {
a += b;
return a;
}
}
এখন javap -c(সান জেডিকে অন্তর্ভুক্ত) এর সাথে বিচ্ছিন্ন করুন । আপনার তালিকা সহ একটি তালিকা দেখতে হবে:
java.lang.String cat(java.lang.String, java.lang.String);
Code:
0: new #2; //class java/lang/StringBuilder
3: dup
4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
7: aload_1
8: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
11: aload_2
12: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
15: invokevirtual #5; //Method java/lang/StringBuilder.toString:()Ljava/lang/ String;
18: astore_1
19: aload_1
20: areturn
সুতরাং, a += bএর সমতুল্য
a = new StringBuilder()
.append(a)
.append(b)
.toString();
concatপদ্ধতি দ্রুত হওয়া উচিত। যাইহোক, আরও স্ট্রিং সহ StringBuilderপদ্ধতিটি কমপক্ষে পারফরম্যান্সের ক্ষেত্রে জিতে।
এর উত্স কোড Stringএবং StringBuilder(এবং এর প্যাকেজ-ব্যক্তিগত বেস শ্রেণি) সান জেডিকে src.zip এ উপলব্ধ। আপনি দেখতে পারেন যে আপনি একটি চরের অ্যারে তৈরি করছেন (প্রয়োজনীয় হিসাবে পুনরায় আকার দিন) এবং আপনি ফাইনালটি তৈরি করার সময় এটিকে ফেলে দিচ্ছেন String। অনুশীলনে মেমরি বরাদ্দ আশ্চর্যজনকভাবে দ্রুত।
আপডেট: পাভেল অ্যাডামস্কি নোট হিসাবে, সাম্প্রতিকতম হটস্পটে কর্মক্ষমতা পরিবর্তন হয়েছে। javacএখনও ঠিক একই কোড উত্পাদন করে তবে বাইটকোড সংকলক চিট করে। সাধারণ টেস্টিং পুরোপুরি ব্যর্থ হয় কারণ পুরো কোডের কোড ফেলে দেওয়া হয়। সামিং System.identityHashCode(না String.hashCode) দেখায় কোডটির StringBufferকিছুটা সুবিধা আছে। পরবর্তী আপডেটটি প্রকাশের সময় পরিবর্তনের বিষয়, বা আপনি যদি অন্য কোনও জেভিএম ব্যবহার করেন। থেকে @lukaseder , হটস্পট জেভিএম intrinsics একটি তালিকা ।