স্ট্রিং যদি অন্যের মতো ক্লাস হয় তবে ডাবল কোট ব্যবহার করে কীভাবে এটি আরম্ভ করা যেতে পারে?
java.lang.Stringজাভা ভাষার বিশেষ চিকিত্সা করুন।
স্ট্রিং যদি অন্যের মতো ক্লাস হয় তবে ডাবল কোট ব্যবহার করে কীভাবে এটি আরম্ভ করা যেতে পারে?
java.lang.Stringজাভা ভাষার বিশেষ চিকিত্সা করুন।
উত্তর:
জাভা ডিজাইনারগণ ভাষাটির কার্যকারিতা উন্নত করার জন্য সবকিছুকে একটি বস্তু তৈরি করার পরিবর্তে কোনও বস্তু-কেন্দ্রিক ভাষায় আদিম প্রকারগুলি ধরে রাখার সিদ্ধান্ত নিয়েছিলেন। প্রিমিটিভগুলি কল স্ট্যাকে সঞ্চিত থাকে, যার জন্য কম সঞ্চয় স্থানের প্রয়োজন হয় এবং ম্যানিপুলেট করা সস্তা aper অন্যদিকে, বস্তুগুলি প্রোগ্রামের স্তূপে সঞ্চিত থাকে, যার জন্য জটিল মেমরি পরিচালনা এবং আরও সঞ্চয় স্থানের প্রয়োজন হয়।
পারফরম্যান্স কারণে, জাভা এর স্ট্রিং একটি আদিম এবং একটি শ্রেণীর মধ্যে হতে ডিজাইন করা হয়েছে।
উদাহরণ স্বরূপ
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object

দ্রষ্টব্য: স্ট্রিং লিটারেলগুলি একটি সাধারণ পুলে সংরক্ষণ করা হয়। এটি স্টোরেজ সংরক্ষণের জন্য একই বিষয়বস্তুগুলির সাথে স্ট্রিংগুলির জন্য স্টোরেজ ভাগ করার সুবিধা দেয়। Stringনতুন অপারেটরের মাধ্যমে বরাদ্দকৃত অবজেক্টগুলি heapস্টোরেজ করা হয় এবং একই সামগ্রীর জন্য কোনও স্টোরেজ ভাগ করে নেওয়া হয় না।
জাভা স্ট্রিংকে একটি বিশেষ শ্রেণি হিসাবে বিবেচনা করে, আপনি উভয় উপায়ে আরম্ভ করতে পারেন
সরাসরি আক্ষরিক অর্পণ
String a = "adsasdf";নতুন কীওয়ার্ড ব্যবহার করে অন্যান্য অবজেক্ট হিসাবে
String a = new String("adsasdf");আপনি যখন সাইনটির সাথে তুলনা করতে চান তখন আপনাকে বিশেষ যত্ন নিতে হবে ==:
String a = "asdf";
String b = "asdf";
System.out.println(a == b); // True
System.out.println(a.equals(b)); // True
String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b); // False
System.out.println(a.equals(b)); // True
এর কারণ এটি হয় যে প্রথম ক্ষেত্রে বস্তুগুলিকে ক এবং বি বলা হয় এমন কিছুতে রাখা হয় literal poolএবং তারা উভয়ই একই বস্তুর উল্লেখ করে তাই তারা উভয় উপায়েই সমান।
তবে দ্বিতীয় ক্ষেত্রে a এবং b বিভিন্ন অবজেক্টের রেফারেন্স দেয় যেমন আমরা যখন অন্য কোনও অবজেক্টকে আরম্ভ করি। সুতরাং ==অপারেটরের সাথে তুলনা করার সময় এগুলি অসম হয় যখন তারা মানগুলিতে সমান।
স্ট্রিং জেএলএসে বিশেষ চিকিত্সা পেয়েছে: এটি দুটি অ-আদিম ধরণের মধ্যে একটি যার জন্য আক্ষরিক উপস্থিতি রয়েছে (অন্যটি হ'ল Class) * ।
জেএলএস থেকে :
একটি স্ট্রিং আক্ষরিক হ'ল শ্রেণি `স্ট্রিং [...] এর উদাহরণগুলির একটি উল্লেখ।
* ঠিক আছে, এটির সাথে "নাল টাইপ" আছে এটি "নাল আক্ষরিক" null, তবে বেশিরভাগ লোক "নাল টাইপ" কে সঠিক প্রকার হিসাবে ভাবেন না।
nullযে কোনও রেফারেন্স টাইপ ভেরিয়েবলের জন্য নিযুক্ত করার অনুমতি দেয় । অন্যথায়, এটি একটি আকর্ষণীয় ধরণের নয়।
ডাবল কোটের ভিতরে পাঠ্য একটি আক্ষরিক Stringবস্তু তৈরি করে ।
String myString = "Some text";
উপরের কোডটি Stringডাবল কোট ব্যবহার করে একটি অবজেক্ট তৈরি করে।
স্ট্রিংগুলি প্রায়শই প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। যেহেতু জাভা বস্তুমুখী একটি স্ট্রিং একটি বস্তু। জটিল নতুন স্ট্রিং এড়ানোর জন্য ("কিছু স্ট্রিং"); প্রতিবার স্ট্রিং অবজেক্টের দরকার হলে স্টেটমেন্ট জাভা আপনাকে স্ট্রিং আক্ষরিক ব্যবহার করে স্ট্রিং অবজেক্ট তৈরি করতে দেয়।
তবে আপনার মনে রাখা উচিত স্ট্রিং সমতা। আমি কী বলতে চাইছি তা প্রমাণ করার জন্য এখানে একটি সংক্ষিপ্ত JUnit পরীক্ষা।
@Test
public void stringTest() {
// a string literal and a string object created
// with the same literal are equal
assertEquals("string", new String("string"));
// two string literals are the same string object
assertSame("string", "string");
// a string literal is not the same object instance
// as a string object created with the same string literal
assertFalse("string" == new String("string"));
// java's String.intern() method gives you the same
// string object reference for all strings that are equal.
assertSame("string", new String("string").intern());
}
new String(String src)তবে আপনি নির্মাণকারীকে একটি স্ট্রিংও আক্ষরিক দিতে সক্ষম হবেন না। আপনাকে একটি সূচনা করতে হবে char [], এবং তারপরে String(char [] src)স্ট্রিংটি তৈরি করতে কনসার্টরটি ব্যবহার করতে হবে, অথবা আপনাকে কোনও ফাইল থেকে স্ট্রিংটি পড়তে হবে।
- স্ট্রিং জাভাতে একটি ক্লাস । আপনি এটি সম্পর্কে ঠিক বলেছেন, তাই আমরা সর্বদা newকীওয়ার্ডটি দিয়ে আরম্ভ করতে পারি ।
- তবে আমরা যখন এমন কিছু করি:
String s = "";
উপরের বিবৃতিটি সংকলক দ্বারা একটি বিশেষ স্ট্রিং অবজেক্ট হিসাবে চিহ্নিত করা হয়েছে এবং তারপরে JVM ক্লাসটি লোড করার সময় (আরম্ভের আগে লোড করা হয়) এটি স্ট্রিং আক্ষরিক হিসাবে পরিচিত যা এটি দেখায় , যা স্ট্রিং আক্ষরিক পুলে সংরক্ষণ করা হয় ।
- সুতরাং পদ্ধতিটি ব্যবহার করে new()এবং একটি স্ট্রিং তৈরি করা যেতে পারে "", তবে পরবর্তীটি একটি স্ট্রিং আক্ষরিক সরবরাহ করে যা স্ট্রিং অবজেক্টের কোনও রেফারেন্স না পাওয়া সত্ত্বেও স্তূপে অবস্থান করে, কারণ এর স্ট্রিং আক্ষরিক পুল থেকে রেফারেন্স রয়েছে।
জাভা আমাদের জন্য একটি দুটি পদক্ষেপ প্রক্রিয়া করে।
String str = "hello";
সমতুল্য
char data[] = {'h', 'e', 'l' , 'l', 'o'};
String str = new String(data);
[। নেট] [১] এর মতো একটি জিনিস পেয়েছে।
String(Char[]) constructor
না
String(char[] value)
উল্লেখ যুক্ত করা:
"hello"এটি একটি স্ট্রিং আক্ষরিক এবং সংকলক দ্বারা ধ্রুবক পুলে রাখা হবে, দেখুন জেএলএস §3.10.5 এবং জেভিএমএস -5.1 ।
Java.lang.Stringশুধু একটি ক্লাস নয়। এটি মূল ভাষার একটি অবিচ্ছেদ্য অঙ্গ। সংকলকটির জন্য সিনট্যাকটিক চিনি রয়েছে। উদাহরণস্বরূপ, এর ""জন্য একটি সংক্ষেপণের মতো new String("")। সংকলকটি লেখার ""সময় স্থান বাঁচাতে একই উদাহরণে অভিন্ন স্ট্রিংগুলি অনুকূল করে।"a" + 5 == "a5" ==> true
সংকলকটিতে প্রচুর স্টাফের জন্য সিনট্যাকটিক চিনি রয়েছে, যার মধ্যে অবজেক্ট সংস্করণ এবং তাদের স্থানীয় ধরণের মধ্যে বাক্স / আনবক্স না করা, কোনও পিতামাতার অর্থ অবজেক্ট, ডিফল্ট কনস্ট্রাক্টর, ...
""এর জন্য কোনও সংক্ষেপণ নয় new String("")। আপনি যদি ব্যবহার করেন ""তবে প্রথমটি যা করা হবে তা হ'ল জেভিএমের স্ট্রিং পুলে ম্যাচগুলি অনুসন্ধান করা এবং যদি এটি সত্য হয় তবে এটি স্ট্রিংটি ফিরিয়ে দেবে। ব্যবহার করে new String("")আপনি সর্বদা একটি নতুন স্ট্রিং তৈরি করবেন, এমনকি স্ট্রিং পুলে স্ট্রিং ইতিমধ্যে উপস্থিত থাকলেও (কারণ এটি স্ট্রিং পুলে সংরক্ষণ করা হবে না)।
" "ইতিমধ্যে একটি স্ট্রিং!