জাভাতে সমস্ত যুক্তি মান দ্বারা পাস করা হয়। যখন আপনি Stringকোনও ফাংশনে একটি পাস করেন , তখন যে মানটি পাস হয় is তা স্ট্রিং অবজেক্টের একটি রেফারেন্স, তবে আপনি সেই রেফারেন্সটি সংশোধন করতে পারবেন না এবং অন্তর্নিহিত স্ট্রিং অবজেক্টটি অপরিবর্তনীয়।
নিয়োগ
zText += foo;
সমান:
zText = new String(zText + "foo");
এটি হল (এটি স্থানীয়ভাবে) প্যারামিটারটিকে zTextএকটি নতুন রেফারেন্স হিসাবে পুনরায় সাইন করে , যা একটি নতুন মেমরি অবস্থানকে নির্দেশ করে, Stringএতে একটি নতুন থাকে যা সংযোজন zTextসহ মূল বিষয়বস্তু ধারণ করে "foo"।
আসল অবজেক্টটি সংশোধিত হয় না এবং main()পদ্ধতিটির স্থানীয় ভেরিয়েবলটি zTextএখনও মূল (খালি) স্ট্রিংকে নির্দেশ করে।
class StringFiller {
static void fillString(String zText) {
zText += "foo";
System.out.println("Local value: " + zText);
}
public static void main(String[] args) {
String zText = "";
System.out.println("Original value: " + zText);
fillString(zText);
System.out.println("Final value: " + zText);
}
}
কপি করে প্রিন্ট:
Original value:
Local value: foo
Final value:
আপনি যদি স্ট্রিংটি সংশোধন করতে চান তবে আপনি হিসাবে উল্লেখযোগ্য ব্যবহার হিসাবে StringBuilderবা অন্য কোনও ধারক (একটি অ্যারে বা একটি AtomicReferenceবা কাস্টম ধারক শ্রেণি) যা আপনাকে পয়েন্টার ইন্ডিরেশনের একটি অতিরিক্ত স্তর দেয় can বিকল্পভাবে, কেবল নতুন মানটি ফিরিয়ে দিন এবং এটি নির্ধারণ করুন:
class StringFiller2 {
static String fillString(String zText) {
zText += "foo";
System.out.println("Local value: " + zText);
return zText;
}
public static void main(String[] args) {
String zText = "";
System.out.println("Original value: " + zText);
zText = fillString(zText);
System.out.println("Final value: " + zText);
}
}
কপি করে প্রিন্ট:
Original value:
Local value: foo
Final value: foo
এটি সম্ভবত সাধারণ ক্ষেত্রে সর্বাধিক জাভা-জাতীয় সমাধান - কার্যকর জাভা আইটেমটি "প্রিয় অপরিবর্তনীয়তা" দেখুন।
হিসাবে সুপরিচিত, যদিও, StringBuilderপ্রায়ই আপনি ভাল পারফরম্যান্স দিতে হবে - আপনি, কি বিশেষ করে একটি লুপ ভিতরে, ব্যবহার সংযোজন অনেক আছে StringBuilder।
তবে আপনি পারলে Stringsপরিবর্তযোগ্য পরিবর্তে অপরিবর্তনীয় হয়ে ওঠার চেষ্টা করুন StringBuilders- আপনার কোডটি পড়া সহজ এবং আরও রক্ষণাবেক্ষণযোগ্য হবে। আপনার প্যারামিটারগুলি তৈরি করা finalএবং আপনার আইডিই কনফিগার করার বিষয়ে আপনাকে সতর্ক করার জন্য যখন আপনি কোনও পদ্ধতির প্যারামিটারটিকে কোনও নতুন মানকে পুনরায় নিযুক্ত করেন Consider