String s = "hello";
String backup_of_s = s;
s = "bye";
এই মুহুর্তে, ব্যাকআপ ভেরিয়েবলটিতে এখনও মূল মান "হ্যালো" রয়েছে (এটি স্ট্রিংয়ের অপরিবর্তনীয় অধিকারের কারণে?)।
তবে এই পদ্ধতিটি দিয়ে স্ট্রিংগুলি অনুলিপি করা কি নিরাপদ (যা অবশ্যই নিয়মিত পরিবর্তনীয় জিনিসগুলি অনুলিপি করা নিরাপদ নয়), বা এটি লেখার চেয়ে আরও ভাল? :
String s = "hello";
String backup_of_s = new String(s);
s = "bye";
অন্য কথায়, এই দুটি স্নিপেটের মধ্যে পার্থক্য (যদি থাকে) তবে কী?
সম্পাদনা করুন - প্রথম স্নিপেটটি নিরাপদ থাকার কারণ:
ইতিমধ্যে সরবরাহ করা ভাল উত্তরের (যা মূলত 2 স্নিপেটের মধ্যে পারফরম্যান্সের পার্থক্যের প্রশ্নে মূলত মনোনিবেশ করা হয়েছিল) এর উপর ভিত্তি করে আমাকে কিছুটা বিশদ দিয়ে জিনিসগুলি ব্যাখ্যা করতে দাও:
স্ট্রিং জাভাতে অপরিবর্তনীয়, যার অর্থ একটি স্ট্রিং অবজেক্ট তার নির্মাণের পরে পরিবর্তন করা যায় না। তাই,
String s = "hello";একটি নতুন স্ট্রিং দৃষ্টান্ত তৈরি করে এবং এর ঠিকানাটি বরাদ্দ করে s( sউদাহরণ / বস্তুর উল্লেখ হিসাবে)
String backup_of_s = s;একটি নতুন ভেরিয়েবল তৈরি করে backup_of_sএবং এটি সূচনা করে যাতে এটি বর্তমানে রেফারেন্স করা অবজেক্টটির উল্লেখ করে s।
দ্রষ্টব্য: স্ট্রিং অপরিবর্তনীয়তা গ্যারান্টি দেয় যে এই বস্তুটি সংশোধন করা হবে না: আমাদের ব্যাকআপ নিরাপদ
নোট 2: জাভা আবর্জনা সংগ্রহের প্রক্রিয়া গ্যারান্টি দেয় যে যতক্ষণ না এটি কমপক্ষে একটি ভেরিয়েবল দ্বারা উল্লেখ করা হয় ততক্ষণ এই বস্তুটি ধ্বংস হবে না ( backup_of_sএই ক্ষেত্রে)
অবশেষে, s = "bye";আরেকটি স্ট্রিং উদাহরণ তৈরি করে (অপরিবর্তনীয়তার কারণে এটি একমাত্র উপায়), এবং sভেরিয়েবলটি সংশোধন করে যাতে এটি এখন নতুন বস্তুর উল্লেখ করে।