Java তে String, StringBuilder, এবং StringBuffer তিনটি প্রধান ক্লাস যা স্ট্রিং (অক্ষরের সিকোয়েন্স) নিয়ে কাজ করতে ব্যবহৃত হয়। এই তিনটি ক্লাসের মধ্যে পার্থক্য রয়েছে, এবং সেগুলি বিভিন্ন পরিস্থিতিতে ব্যবহার করা হয়। এখানে আমি এই তিনটি ক্লাসের মধ্যে পার্থক্য বিস্তারিতভাবে ব্যাখ্যা করব।
1. String:
String হল একটি immutable (অপরিবর্তনশীল) ক্লাস, অর্থাৎ একবার একটি স্ট্রিং তৈরি হওয়ার পর তার মান পরিবর্তন করা যায় না। যখন আপনি একটি স্ট্রিংয়ের মান পরিবর্তন করার চেষ্টা করেন, তখন একটি নতুন স্ট্রিং অবজেক্ট তৈরি হয় এবং পুরানো স্ট্রিং অব্যবহৃত থাকে। এর কারণে এটি কিছু ক্ষেত্রে কম কার্যকরী হতে পারে, বিশেষত যখন অনেক পরিবর্তন করতে হয়।
Characteristics of String:
- Immutable: একবার স্ট্রিং তৈরি হলে তার মান পরিবর্তন করা যায় না।
- Thread-Safe: স্ট্রিং থ্রেড সেফ, অর্থাৎ এটি একাধিক থ্রেড দ্বারা একসাথে ব্যবহার করা হলেও সুরক্ষিত থাকে।
- Performance: স্ট্রিংয়ের পরিবর্তন করতে অনেক বেশি সময় নেয় কারণ প্রতিবার নতুন একটি অবজেক্ট তৈরি হয়।
Example:
String str1 = "Hello";
String str2 = str1;
str1 = "World"; // This creates a new String object for str1
System.out.println(str2); // Outputs "Hello", str2 remains unchanged
2. StringBuilder:
StringBuilder একটি mutable (পরিবর্তনশীল) ক্লাস, যার মান পরিবর্তন করা যায় এবং এটি স্ট্রিংয়ের মতই কাজ করে। এটি সাধারণত তখন ব্যবহার করা হয় যখন বারবার স্ট্রিংয়ের মান পরিবর্তন করতে হয়, কারণ এটি দক্ষভাবে কাজ করতে পারে।
Characteristics of StringBuilder:
- Mutable: স্ট্রিংয়ের মান পরিবর্তন করা যায়।
- Not Thread-Safe: এটি থ্রেড সেফ নয়, অর্থাৎ একাধিক থ্রেড একসাথে এটি পরিবর্তন করলে সমস্যা হতে পারে।
- Performance: এটি স্ট্রিংয়ের তুলনায় অনেক দ্রুত কাজ করে, বিশেষত যখন অনেক পরিবর্তন বা অ্যাপেন্ড (append) অপারেশন করা হয়।
Example:
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // Changes the original object
System.out.println(sb); // Outputs "Hello World"
3. StringBuffer:
StringBuffer স্ট্রিংয়ের মতো একটি mutable ক্লাস, তবে এটি thread-safe। এটি একাধিক থ্রেড দ্বারা একই সময়ে নিরাপদে ব্যবহৃত হতে পারে, তবে এর কারণে কিছু পারফরম্যান্স হানি হতে পারে, কারণ এতে synchronization এর সুবিধা রয়েছে।
Characteristics of StringBuffer:
- Mutable: স্ট্রিংয়ের মান পরিবর্তন করা যায়।
- Thread-Safe: এটি থ্রেড সেফ, তাই একাধিক থ্রেড দ্বারা একসাথে এটি নিরাপদে ব্যবহার করা যায়।
- Performance: StringBuilder এর তুলনায় কিছুটা কম কার্যকরী কারণ এতে synchronization রয়েছে, তবে এটি অনেক পরিস্থিতিতে থ্রেড সেফতার কারণে ব্যবহার করা হয়।
Example:
StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World"); // Modifies the original object
System.out.println(sbf); // Outputs "Hello World"
String, StringBuilder, এবং StringBuffer এর মধ্যে পার্থক্য:
| বিষয় | String | StringBuilder | StringBuffer |
|---|---|---|---|
| Mutability | Immutable (পরিবর্তনশীল নয়) | Mutable (পরিবর্তনশীল) | Mutable (পরিবর্তনশীল) |
| Thread Safety | Thread-Safe (থ্রেড সেফ) | Not Thread-Safe (থ্রেড সেফ নয়) | Thread-Safe (থ্রেড সেফ) |
| Performance | ধীর (এটি নতুন অবজেক্ট তৈরি করে প্রতিবার পরিবর্তন করতে) | দ্রুত (কম সময় নেয় পরিবর্তন করার জন্য) | StringBuilder এর চেয়ে ধীর (যেহেতু এটি synchronized) |
| Synchronization | Synchronization নেই | Synchronization নেই | Synchronization আছে (থ্রেড সেফতার জন্য) |
| Use Case | ছোট বা অপরিবর্তনশীল স্ট্রিং | যখন অনেক পরিবর্তন বা অ্যাপেন্ড করা প্রয়োজন | যখন অনেক থ্রেডের মধ্যে স্ট্রিং পরিবর্তন প্রয়োজন |
কোনটি কখন ব্যবহার করবেন?
- String:
- যখন আপনি অপরিবর্তনশীল (immutable) স্ট্রিং ব্যবহার করতে চান।
- যদি স্ট্রিংয়ের পরিবর্তন একবারই বা খুব কম হয়ে থাকে, তবে
Stringব্যবহার করা ভালো।
- StringBuilder:
- যখন আপনি একাধিক পরিবর্তন বা অ্যাপেন্ড অপারেশন করতে চান এবং থ্রেড সেফটি প্রয়োজন না হয়।
- এটি পারফরম্যান্সের জন্য উপযুক্ত, বিশেষত যখন স্ট্রিংয়ের মান একাধিকবার পরিবর্তন করতে হবে।
- StringBuffer:
- যখন আপনি একাধিক থ্রেড দ্বারা একই স্ট্রিং পরিবর্তন করতে চান, এবং থ্রেড সেফটি প্রয়োজন।
- এটি কিছুটা ধীর হতে পারে, তবে থ্রেড সেফতার জন্য উপযুক্ত।
- String উপযুক্ত যখন স্ট্রিংয়ের মান অপরিবর্তনশীল থাকতে হয় বা একবার সেট করা হয়।
- StringBuilder ব্যবহৃত হয় যখন স্ট্রিংয়ের মান পরিবর্তন করা হয় এবং থ্রেড সেফটি প্রয়োজন হয় না।
- StringBuffer ব্যবহৃত হয় যখন একাধিক থ্রেড একই স্ট্রিং পরিবর্তন করে এবং থ্রেড সেফটি প্রয়োজন।
এটি আপনার প্রোগ্রামে পারফরম্যান্স এবং থ্রেড সেফটি নিয়ন্ত্রণ করতে সহায়তা করবে।
Read more