java - জাভাতে কোন স্ট্রিং নেই কেন?




5 Answers

String.EMPTY 12 অক্ষর এবং "" দুটি, এবং তারা উভয় রানটাইম সময়ে মেমরিতে ঠিক একই দৃষ্টান্ত উল্লেখ করা হবে। আমি সম্পূর্ণরূপে নিশ্চিত নই কেন String.EMPTY কম্পাইল সময় সংরক্ষণ করবে, আসলে আমি মনে করি এটি পরবর্তী হবে।

বিশেষ করে String বিবেচনা করা অপরিহার্য, এটি এমন নয় যে আপনি প্রথমে একটি খালি স্ট্রিং পেতে পারেন এবং এটিতে কিছু ক্রিয়াকলাপ পরিচালনা করতে পারেন - StringBuilder ব্যবহার করতে সেরা (অথবা StringBuffer যদি আপনি থ্রেড-নিরাপদ হতে চান) এবং এটি একটি StringBuilder পরিণত করুন।

হালনাগাদ
আপনার মন্তব্য থেকে প্রশ্ন:

আসলে এই TextBox.setText(""); কি TextBox.setText("");

আমি আপনার উপযুক্ত ক্লাসে ধ্রুবক প্রদান সম্পূর্ণ বৈধ হবে বিশ্বাস করি:

private static final String EMPTY_STRING = "";

এবং তারপর হিসাবে আপনার কোড হিসাবে এটি রেফারেন্স

TextBox.setText(EMPTY_STRING);

এভাবে অন্তত আপনি স্পষ্ট যে আপনি একটি খালি স্ট্রিং চান, বরং আপনি আপনার আইডিই তে স্ট্রিংটি ভুলে গেছেন বা অনুরূপ কিছু।

আমি বুঝতে পারি যে প্রত্যেক সময় আমি স্ট্রিং আক্ষরিক টাইপ করি "" , "" একই স্ট্রিং বস্তুটি স্ট্রিং পুলে উল্লেখ করা হয়।

কিন্তু স্ট্রিং এপিআই কেন একটি public static final String Empty = ""; , তাই আমি String.Empty রেফারেন্স ব্যবহার করতে পারে?

কম্পাইলারটি বিদ্যমান স্ট্রিংটির রেফারেন্স জানতে পারে এবং এটি পুনঃব্যবহারের জন্য তৈরি করা হয়েছে কিনা তা যাচাই করতে হবে না, তাই অন্তত কম্পাইল সময়টি সংরক্ষণ করবে। এবং ব্যক্তিগতভাবে আমি মনে করি স্ট্রিং লিটারালের বিস্তার, বিশেষত ক্ষুদ্রতম, অনেক ক্ষেত্রে একটি "কোড গন্ধ"।

তাই কোন স্ট্রিং। উপসর্গ পিছনে একটি গ্র্যান্ড ডিজাইন কারণ ছিল, বা ভাষা নির্মাতারা সহজভাবে আমার মতামত ভাগ না?




আপনি নিল মান সম্পর্কে উদ্বেজক ছাড়া খালি স্ট্রিং সঙ্গে তুলনা করতে চান, তাহলে আপনি নিম্নলিখিত করতে পারেন।

if ("".equals(text))

পরিশেষে আপনি কি বিশ্বাসযোগ্য তা আপনি করতে হবে। বেশিরভাগ প্রোগ্রামার অনুমান করে যে "ফাঁকা স্ট্রিং মানে", কোনও স্ট্রিং কোনটিতে কিছু লিখতে ভুলে যায়নি।

আপনি যদি একটি কর্মক্ষমতা সুবিধা মনে করেন, আপনি এটি পরীক্ষা করা উচিত। আপনি নিজের জন্য তার মূল্য পরীক্ষার মনে করেন না, এটি একটি ভাল ইঙ্গিত এটা সত্যিই মূল্যহীন নয়।

15 বছরেরও বেশি সময় আগে যখন ভাষাটি ডিজাইন করা হয়েছিল তখন এটি সমাধান করার চেষ্টা করার মত মনে হচ্ছে।




আপনি যদি সত্যিই স্ট্রিং.EMPTY ধ্রুবক চান তবে আপনি আপনার প্রোজেক্টে "কনস্টান্টস" (উদাহরণস্বরূপ) নামে একটি ইউটিলিটি স্ট্যাটিক চূড়ান্ত ক্লাস তৈরি করতে পারেন। এই শ্রেণিটি আপনার স্ট্রিংগুলি সহ খাঁটি স্ট্রিং সহ বজায় থাকবে ...

একই ধারণাতে, আপনি জিরো, এক ইন্ট স্টোনেন্ট তৈরি করতে পারেন ... যা ইন্টিগ্রার ক্লাসে বিদ্যমান না, কিন্তু আমি যেমন মন্তব্য করেছি, লিখতে এবং পড়তে ব্যথা হবে:

for(int i=Constants.ZERO; ...) {
    if(myArray.length > Constants.ONE) {
        System.out.println("More than one element");
    }
}

প্রভৃতি




শুধু বলবেন না "স্ট্রিংয়ের মেমরি পুল আক্ষরিক রূপে পুনঃব্যবহৃত হয়, কেস বন্ধ হয়ে যায়"। হুড অধীনে কি কম্পাইলার করবেন এখানে বিন্দু নয়। প্রশ্ন যুক্তিসঙ্গত, বিশেষ করে প্রাপ্ত আপ-ভোট সংখ্যা দেওয়া।

এটা সমান্তরাল সম্পর্কে, এটি ছাড়া APIs মানুষের জন্য ব্যবহার করা কঠিন। প্রারম্ভিক জাভা এসডিকে কুখ্যাতভাবে নিয়ম উপেক্ষা করে এবং এখন এটি খুব দেরি হয়ে গেছে। এখানে আমার মাথার শীর্ষে কয়েকটি উদাহরণ রয়েছে, আপনার "প্রিয়" উদাহরণে চিপ করা মুক্ত করুন:

  • BigDecimal.ZERO, কিন্তু কোনও AbstractCollection.EMPTY, String.EMPTY
  • Array.length কিন্তু তালিকা.size ()
  • List.add (), Set.add () কিন্তু Map.put (), ByteBuffer.put () এবং স্ট্রিংব্লিল্ডার.এপেন্ড (), স্ট্যাক.push () কে ভুলবেন না



আমি বুঝি যে প্রত্যেকবার আমি স্ট্রিং আক্ষরিক "টাইপ করি", একই স্ট্রিং বস্তুটি স্ট্রিং পুলে উল্লেখ করা হয়।
এমন কোন গ্যারান্টি নেই। এবং আপনি আপনার আবেদনটিতে এটির উপর নির্ভর করতে পারবেন না, এটি সম্পূর্ণরূপে জেভিএম পর্যন্ত সিদ্ধান্ত নিতে পারে।

নাকি ভাষা নির্মাতারা কেবল আমার মতামত ভাগ করে নি?
হাঁ। আমার কাছে, এটি খুব কম অগ্রাধিকার জিনিস মনে হয়।




Related

java

Tags

java