জাভাতে "+" অপারেটর এবং স্ট্রিংবিল্ডার ব্যবহারের মধ্যে পারফরম্যান্সের পার্থক্য রয়েছে?


উত্তর 1:

জাভাতে "+" অপারেটর এবং স্ট্রিংবিল্ডার ব্যবহারের মধ্যে পারফরম্যান্সের পার্থক্য রয়েছে?

একক লাইনে যেমন:

স্ট্রিং স্ট্রিং 1 = "এক" + "দুই";
স্ট্রিং স্ট্রিং 2 = নতুন স্ট্রিংবিল্ডার ("এক")। সংযোজন ("দুটি")। টু স্ট্রিং ();

পারফরম্যান্সে কোনও পার্থক্য থাকা উচিত না। আসলে, আধুনিক জাভা ইকোসিস্টেমগুলিতে, প্রথমটি সংকলনের সময় দ্বিতীয়টিতে অনুকূলিত করা হয়। এটি ক্রিয়াতে দেখতে, আপনার প্রিয় ডিবাগারটি ব্যবহার করে প্রথমে পদক্ষেপের চেষ্টা করুন।

তবে, যদি আপনার পৃথক রেখাগুলিতে স্ট্রিংযুক্ত স্ট্রিংগুলি বা, লুপের জন্য বলুন:

স্ট্রিং স্ট্রিং 1 = "";
স্ট্রিংবিল্ডার এসবি = নতুন স্ট্রিংবিল্ডার ();

এর জন্য (পূর্ণসংখ্যা i = 0; i <5; i ++) {
  স্ট্রিং 1 = স্ট্রিং 1 + আই.টোস্ট্রিং ();
  sb.append (i.toString ());
}

স্ট্রিং স্ট্রিং 2 = sb.toString ();

তারপরে স্ট্রিংবিল্ডার ব্যবহার করা আরও "দক্ষ" এবং কখনও কখনও আরও জটিল স্ট্রিং তৈরির পছন্দসই উপায়। যতদূর আমি জানি, বর্তমানে কোনও জাভা সংকলক স্ট্রিংবিল্ডারের কাছে পুনরাবৃত্তি করতে অনুকূলিত করবে না।


উত্তর 2:

সংক্ষিপ্ত উত্তর: থাকতে পারে, তবে বেশিরভাগ সময় এটি উদ্বিগ্ন হওয়ার মতো নয়। অকাল অপ্টিমাইজেশনের উপর পরিষ্কার কোড পছন্দ।

আধুনিক জেভিএমগুলি স্ট্রিং কনটেনটেশনকে "+" দিয়ে অনুকূলিত করতে এবং এটিকে স্ট্রিংবিল্ডারে রূপান্তর করতে পারে এবং যেহেতু তারা দেখতে পাবে যে ফলাফলটি স্ট্রিংটি কত দীর্ঘ হতে চলেছে তাই তারা শুরুতে স্ট্রিংবিল্ডারের কাছে সঠিক আকারটি বরাদ্দ করতে পারে। আপনি যদি ডিফল্ট অ্যারে আকারটি ব্যবহার করে নিজেই একটি স্ট্রিংবিল্ডার তৈরি করেন তবে চর অ্যারেটি পরে বাড়ানো হতে পারে, যার মধ্যে একটি অ্যারে অনুলিপি জড়িত রয়েছে, তাই আসলে ধীর হতে পারে।

জাভা 9 এর পর থেকে, স্ট্রিং কনটেনটেশন রানটাইমের সময় সিদ্ধান্ত নিয়েছে এমন একটি কৌশল নিয়ে অনেক বেশি অনুকূলিত।

আপনি যদি বারবার কোনও লুপে একটি স্ট্রিংয়ে যুক্ত হন, তবে আপনি সম্ভবত স্ট্রিংবিল্ডার ব্যবহার করে ভুল করতে পারবেন না, তবে এটি জানা থাকলে সঠিক আকারটি আগেই বরাদ্দ করুন। লুপগুলির বাইরে, যখনই এটি আরও পঠনযোগ্য হবে তখন "+" দিয়ে আটকে থাকুন; এবং বিশ্বাস করুন যে জেভিএম হ'ল বা শীঘ্রই আপনার চেয়ে অনুকূলিতকরণে আরও ভাল।