"" ব্যবহার করে একটি স্ট্রিং কীভাবে শুরু করা যেতে পারে?


154

স্ট্রিং যদি অন্যের মতো ক্লাস হয় তবে ডাবল কোট ব্যবহার করে কীভাবে এটি আরম্ভ করা যেতে পারে?


25
স্ট্রিং একটি ভিআইপি ক্লাস। " "ইতিমধ্যে একটি স্ট্রিং!
johnchen902

2
কোন বিশেষ অর্থ। আমি শুধু খুব গুরুত্বপূর্ণ বোঝাতে চেয়েছিলাম। অর্থাৎ java.lang.Stringজাভা ভাষার বিশেষ চিকিত্সা করুন।
johnchen902

16
কে বলে যে স্ট্রিংটি "অন্যের মতো একটি শ্রেণি"? এটি অন্য খুব ভিন্ন একটি খুব বিশেষ শ্রেণি। যেহেতু আপনার অনুমানটি মিথ্যা, প্রশ্নটি আসলে উত্তরযোগ্য নয়।
এরিক লিপার্ট

5
কেবল অনুমানটি মিথ্যা বলে এর অর্থ এই নয় যে প্রশ্নটি উত্তরযোগ্য নয়। এবং সঠিক উত্তরের ইতিমধ্যে 197 টি ভোট রয়েছে।
Koray Tugay

উত্তর:


293

জাভা স্ট্রিং বিশেষ

জাভা ডিজাইনারগণ ভাষাটির কার্যকারিতা উন্নত করার জন্য সবকিছুকে একটি বস্তু তৈরি করার পরিবর্তে কোনও বস্তু-কেন্দ্রিক ভাষায় আদিম প্রকারগুলি ধরে রাখার সিদ্ধান্ত নিয়েছিলেন। প্রিমিটিভগুলি কল স্ট্যাকে সঞ্চিত থাকে, যার জন্য কম সঞ্চয় স্থানের প্রয়োজন হয় এবং ম্যানিপুলেট করা সস্তা 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স্টোরেজ করা হয় এবং একই সামগ্রীর জন্য কোনও স্টোরেজ ভাগ করে নেওয়া হয় না।


72
নোট করুন যে "সাধারণ পুল" সাধারণত গাদা অংশ।
জোচিম সউর

3
@ জোয়াচিমসৌর হ্যাঁ..অল্প সুবিধা সহ :) যোগ করেছেন যে নোটে note মনে রাখার জন্য ধন্যবাদ।
সুরেশ আত্তা

2
স্ট্রিং এস 1 = "হ্যালো" লেখার জন্য এটি কি দ্রুত; স্ট্রিংয়ের চেয়ে s2 = নতুন স্ট্রিং ("হ্যালো") ;?
ব্যবহারকারী 2097804

28
আমি এটি আপনার উদাহরণে যোগ করব s1 == s2 == s3 তবে এস 4! = এস
আলফ্রেডো ওসোরিও

8
@ অ্যান্ড্রু জ্যাঙ্ক সাম্প্রতিক হটস্পট জেভিএমে (7), স্ট্রিং পুলটি
জেনামে

50

জাভা স্ট্রিংকে একটি বিশেষ শ্রেণি হিসাবে বিবেচনা করে, আপনি উভয় উপায়ে আরম্ভ করতে পারেন

  1. সরাসরি আক্ষরিক অর্পণ

    String a = "adsasdf";
  2. নতুন কীওয়ার্ড ব্যবহার করে অন্যান্য অবজেক্ট হিসাবে

    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 বিভিন্ন অবজেক্টের রেফারেন্স দেয় যেমন আমরা যখন অন্য কোনও অবজেক্টকে আরম্ভ করি। সুতরাং ==অপারেটরের সাথে তুলনা করার সময় এগুলি অসম হয় যখন তারা মানগুলিতে সমান।


18

স্ট্রিং জেএলএসে বিশেষ চিকিত্সা পেয়েছে: এটি দুটি অ-আদিম ধরণের মধ্যে একটি যার জন্য আক্ষরিক উপস্থিতি রয়েছে (অন্যটি হ'ল Class) *

জেএলএস থেকে :

একটি স্ট্রিং আক্ষরিক হ'ল শ্রেণি `স্ট্রিং [...] এর উদাহরণগুলির একটি উল্লেখ।

* ঠিক আছে, এটির সাথে "নাল টাইপ" আছে এটি "নাল আক্ষরিক" null, তবে বেশিরভাগ লোক "নাল টাইপ" কে সঠিক প্রকার হিসাবে ভাবেন না।


1
আমি জানতাম না যে জাভাতে "নাল টাইপ" একটি সঠিক টাইপ। এটি খুব সহায়ক তথ্য, আপনার ফন্টের আকার বাড়ানো উচিত।
গ্রিজেশ চৌহান

1
@ গ্রিজেশচৌহান: ভাল, "নাল টাইপ" হ'ল নিফটি শব্দ মাত্র nullযে কোনও রেফারেন্স টাইপ ভেরিয়েবলের জন্য নিযুক্ত করার অনুমতি দেয় । অন্যথায়, এটি একটি আকর্ষণীয় ধরণের নয়।
জোচিম সৌর

15

এটি জাভা ভাষার একটি বৈশিষ্ট্য। সোর্স কোডের স্ট্রিং লিটারেলগুলিকে বিশেষ চিকিত্সা দেওয়া হয়।

ভাষা অনুমান, এখানে , সহজভাবে বলে যে একটি স্ট্রিং আক্ষরিক Stringটাইপ হয়


5

ডাবল কোটের ভিতরে পাঠ্য একটি আক্ষরিক Stringবস্তু তৈরি করে ।

String myString = "Some text";

উপরের কোডটি Stringডাবল কোট ব্যবহার করে একটি অবজেক্ট তৈরি করে।


4

স্ট্রিংগুলি প্রায়শই প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। যেহেতু জাভা বস্তুমুখী একটি স্ট্রিং একটি বস্তু। জটিল নতুন স্ট্রিং এড়ানোর জন্য ("কিছু স্ট্রিং"); প্রতিবার স্ট্রিং অবজেক্টের দরকার হলে স্টেটমেন্ট জাভা আপনাকে স্ট্রিং আক্ষরিক ব্যবহার করে স্ট্রিং অবজেক্ট তৈরি করতে দেয়।

তবে আপনার মনে রাখা উচিত স্ট্রিং সমতা। আমি কী বলতে চাইছি তা প্রমাণ করার জন্য এখানে একটি সংক্ষিপ্ত 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)স্ট্রিংটি তৈরি করতে কনসার্টরটি ব্যবহার করতে হবে, অথবা আপনাকে কোনও ফাইল থেকে স্ট্রিংটি পড়তে হবে।
এজেম্যানসফিল্ড

এটি সঠিক নয়। একটি স্ট্রিং আক্ষরিক হ'ল একটি উত্স ফাইলে কেবল একটি অক্ষর ক্রম যা ডাবল কোট দ্বারা উত্পন্ন হয়। জাভা স্বয়ংক্রিয়ভাবে এই আক্ষরিক ব্যবহার করে একটি স্ট্রিংয়ের উদাহরণ তৈরি করে। এর পরে একটি আক্ষরিক এবং একটি স্ট্রিং অবজেক্ট সমান, তবে সেগুলি এক নয়। জাভাও এইভাবে প্রয়োগ করা যেতে পারে যে আপনাকে অবশ্যই নতুন স্ট্রিং ("") ব্যবহার করতে হবে; স্ট্রিং অবজেক্টটি ইনস্ট্যান্ট করতে, তবে এটি কেবল আমাদের জীবনকে আরও শক্ত করে তুলবে। সুতরাং আপনি যখন নতুন স্ট্রিং লিখবেন ("একটি স্ট্রিং") জাভা আক্ষরিক "একটি স্ট্রিং" এর জন্য একটি স্ট্রিং অবজেক্ট তৈরি করে এবং এই স্ট্রিং অবজেক্টটিকে নতুন স্ট্রিংয়ের কনস্ট্র্রটারে পাস করে।
রেনি লিঙ্ক

2

শুধু উল্লেখ করার জন্য। একটি স্ট্রিং আক্ষরিক একটি ক্লাস স্ট্রিংয়ের উদাহরণের একটি উল্লেখ যা আপনি এই জাতীয় কোড লিখতে পারেন:

 "ABC" .getBytes ();

 "একটি: B: C" .split ( ":");

 "愛" .codePointAt (0);

2

- স্ট্রিং জাভাতে একটি ক্লাস । আপনি এটি সম্পর্কে ঠিক বলেছেন, তাই আমরা সর্বদা newকীওয়ার্ডটি দিয়ে আরম্ভ করতে পারি ।

- তবে আমরা যখন এমন কিছু করি:

String s = "";

উপরের বিবৃতিটি সংকলক দ্বারা একটি বিশেষ স্ট্রিং অবজেক্ট হিসাবে চিহ্নিত করা হয়েছে এবং তারপরে JVM ক্লাসটি লোড করার সময় (আরম্ভের আগে লোড করা হয়) এটি স্ট্রিং আক্ষরিক হিসাবে পরিচিত যা এটি দেখায় , যা স্ট্রিং আক্ষরিক পুলে সংরক্ষণ করা হয় ।

- সুতরাং পদ্ধতিটি ব্যবহার করে new()এবং একটি স্ট্রিং তৈরি করা যেতে পারে "", তবে পরবর্তীটি একটি স্ট্রিং আক্ষরিক সরবরাহ করে যা স্ট্রিং অবজেক্টের কোনও রেফারেন্স না পাওয়া সত্ত্বেও স্তূপে অবস্থান করে, কারণ এর স্ট্রিং আক্ষরিক পুল থেকে রেফারেন্স রয়েছে।


2

জাভা আমাদের জন্য একটি দুটি পদক্ষেপ প্রক্রিয়া করে।

String str = "hello";

সমতুল্য

char data[] = {'h', 'e', 'l' , 'l', 'o'};
String str = new String(data);

[। নেট] [১] এর মতো একটি জিনিস পেয়েছে।

String(Char[]) constructor

না

String(char[] value)

উল্লেখ যুক্ত করা:


2
আপনার বর্ণিত প্রক্রিয়াটি জাভা আসলে যা করে তা নয়: অন্যরা যেমন ইতিমধ্যে জানিয়েছে, "hello"এটি একটি স্ট্রিং আক্ষরিক এবং সংকলক দ্বারা ধ্রুবক পুলে রাখা হবে, দেখুন জেএলএস §3.10.5 এবং জেভিএমএস -5.1
siegi

1

Java.lang.Stringশুধু একটি ক্লাস নয়। এটি মূল ভাষার একটি অবিচ্ছেদ্য অঙ্গ। সংকলকটির জন্য সিনট্যাকটিক চিনি রয়েছে। উদাহরণস্বরূপ, এর ""জন্য একটি সংক্ষেপণের মতো new String("")। সংকলকটি লেখার ""সময় স্থান বাঁচাতে একই উদাহরণে অভিন্ন স্ট্রিংগুলি অনুকূল করে।"a" + 5 == "a5" ==> true

সংকলকটিতে প্রচুর স্টাফের জন্য সিনট্যাকটিক চিনি রয়েছে, যার মধ্যে অবজেক্ট সংস্করণ এবং তাদের স্থানীয় ধরণের মধ্যে বাক্স / আনবক্স না করা, কোনও পিতামাতার অর্থ অবজেক্ট, ডিফল্ট কনস্ট্রাক্টর, ...


5
""এর জন্য কোনও সংক্ষেপণ নয় new String("")। আপনি যদি ব্যবহার করেন ""তবে প্রথমটি যা করা হবে তা হ'ল জেভিএমের স্ট্রিং পুলে ম্যাচগুলি অনুসন্ধান করা এবং যদি এটি সত্য হয় তবে এটি স্ট্রিংটি ফিরিয়ে দেবে। ব্যবহার করে new String("")আপনি সর্বদা একটি নতুন স্ট্রিং তৈরি করবেন, এমনকি স্ট্রিং পুলে স্ট্রিং ইতিমধ্যে উপস্থিত থাকলেও (কারণ এটি স্ট্রিং পুলে সংরক্ষণ করা হবে না)।
g00glen00b

আমি আমার উত্তর আপডেট। লিস্প প্রতীক ধরণের সমতুল্য স্ট্রিং ধ্রুবক ব্যবহার করার মতো লোকেরা কি তাদের সুবিধার জন্য এটি ব্যবহার করে?
সিলেস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.