না, বেশ না।
প্রথমত, শব্দার্থবিজ্ঞানের মধ্যে কিছুটা পার্থক্য রয়েছে। যদি 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 একটি তালিকা ।