জাভায় স্ট্রিং পুলের কাজ কি?

asked 19 Jan, 17:35

Emranul%20haque%20Rakib's gravatar image

Emranul haque Rakib
33912

edited 04 Feb, 07:43

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618


Pool মানে পুকুর বা অনেক বড় পাত্র বলা যেতে পারে। সুতরাং স্ট্রিং পুল মানে স্ট্রিং এর পুকুর অর্থাৎ যে পুকুরে অসংখ্য স্ট্রিং থাকে তাকে স্ট্রিং পুল বলা যেতে পারে।

এখন প্রশ্ন হল এই স্ট্রিং পুলের কাজ কী?

আমরা জানি জাভাতে এই দুইভাবে স্ট্রিং ডিফাইন করা যায়,

String str1 = "p" + "ool";
String str3 = new String("poo" + "l");
String str2 = "poo" + "l";

প্রথম দুইটার মধ্যে পার্থক্য কি?

আমরা যদি str1 এর মতো করে স্ট্রিং ডিফাইন করি তবে সেই স্ট্রিংটি স্ট্রিং পুলে জমা হবে । এবং পরে যদি কখন আবার একই ধরনের স্ট্রিং (str2) ডিফাইন করতে চাই তাহলে তার জন্য মেমরিতে নতুন কোন জায়গা দখল করবে না । আগের রেফারেন্সটাই এটার মধ্যে কপি হবে।

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

System.out.println("Address of str1 = " + System.identityHashCode(str1));
System.out.println("Address of str2 = " + System.identityHashCode(str2));
System.out.println("Address of str3 = " + System.identityHashCode(str3))

আউটপুটঃ

Address of str1 = 366712642
Address of str2 = 366712642
Address of str3 = 1829164700

উপরে আমরা দেখতে পাচ্ছি যে str1, str2 এর অ্যাড্রেস একই কিন্তু str3 এর অ্যাড্রেস ভিন্ন। এই জন্য আমরা যদি str1 == str2 চেক করি তবে সেটা true রিটার্ন করবে কিন্তু str2 == str3 চেক করলে সেটা false রিটার্ন করবে।

সুতরাং স্ট্রিং পুলের আইডিয়াটা এই রকম, যে স্ট্রিংগুলো আগে থেকেই ডিফাইন করা আছে সেগুলো স্ট্রিং পুলে জমা থাকবে এবং আমরা যদি নতুন কোন স্ট্রিং ডিফাইন করতে চাই (new String() ব্যবহার না করে) তবে জেভিএম আগে চেক করবে এই স্ট্রিংটি স্ট্রিং পুলে আছে কি না। যদি স্ট্রিং পুলে থাকে তবে তবে সেটার অ্যাড্রেসই এটার মাঝে কপি হয়ে যাবে, এর জন্য মেমরিতে নতুন করে জায়গা নেবে না। কিন্তু আমাদের নতুন স্ট্রিংটি যদি স্ট্রিং পুলে না থাকে তবে new String() দিয়ে স্ট্রিং অবজেক্ট ক্রিয়েট করবে।

কম্পিউটার সায়েন্সে String interning নামে একটি টার্ম আছে যা এই স্ট্রিং পুলিং এর কাজ করে দেয়। String interning এর কাজ হল একই ধরনের স্ট্রিংগুলোর শুধু একটাই কপি মেমরিতে থাকবে।

স্ট্রিং পুলিং এর সুবিধা কি?

আপনার মেমরি খরচ অনেক কমিয়ে ফেলছে।

ধন্যবাদ :)

permanent link

answered 20 Jan, 06:40

menon's gravatar image

menon
4.3k324

edited 20 Jan, 07:00

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618

1

str1 and str2 সম্পূর্ণ আলাদা দুইটা ভেরিয়েবল তাহলে দুটার এড্রেস সেম কেনো? বিষয় টা মাথায় ঢুকলো না। @menon vai

(23 Jan, 16:55) Ruman_Hossain

@Ruman_Hossain তুমি তাহলে স্ট্রিং পুলিং বোঝ নি । str1, str2 সম্পূর্ণ আলাদা দুইটা ভেরিয়েবল হলেও তাদের স্ট্রিং ভেলু কিন্তু একই অর্থাৎ "pool" । স্ট্রিং পুলের কাজই হল সে একই স্ট্রিং কে দুইবার মেমরিতে রাখবে না । যেহেতু একই স্ট্রিং কেবল একবারই রাখা হচ্ছে একই স্ট্রিং এর অ্যাড্রেস একই হবে ।

(23 Jan, 17:02) menon
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×205
×4
×1

question asked: 19 Jan, 17:35

question was seen: 246 times

last updated: 04 Feb, 07:43