http://kohlerm.blogspot.co.uk/2009/01/is-javalangstringintern-really-evil.html
অনুযায়ী পূর্বে বস্তুর তুলনা করতে String.equals()ব্যবহার করে এমন জোর দেয়"=="String
http://www.codeinstructions.com/2009/01/busting-javalangstringintern-myths.html
এটি স্ট্রিংগুলির দৈর্ঘ্য এবং তারপরে সামগ্রীগুলির সাথে তুলনা করে।
(যাইহোক, বিক্রয় ক্যাটালগের পণ্য কোড স্ট্রিংগুলি একই দৈর্ঘ্যের হিসাবে দায়বদ্ধ - বিআইসিসি 0417 একজন সাইক্লিস্টের সুরক্ষা হেলমেট, টিআইজি 20003 একটি জীবিত প্রাপ্তবয়স্ক পুরুষ বাঘ - এর মধ্যে একটি অর্ডার করার জন্য আপনার সম্ভবত সমস্ত ধরণের লাইসেন্সের প্রয়োজন need সম্ভবত আপনি একই সাথে একটি সুরক্ষার হেলমেট অর্ডার করুন))
সুতরাং এটি আপনার স্ট্রিংগুলির intern()সংস্করণগুলির সাথে প্রতিস্থাপন করে কোনও উপকার পেয়েছে বলে মনে হচ্ছে তবে আপনি equals()আপনার প্রোগ্রামিংয়ের জন্য "==" ব্যবহার করে সুরক্ষা - এবং পঠনযোগ্যতা এবং মান সম্মতি - ছাড়াই পাবেন get এবং আমি যা বলতে যাচ্ছি তার বেশিরভাগ নির্ভর করে এটি সত্য হওয়া, যদি এটি সত্য হয়।
কিন্তু আপনি কি String.equals()পরীক্ষার আগে এটি ব্যবহারের আগে একটি স্ট্রিং পাস করেছেন এবং অন্য কোনও বস্তু নয় "=="? আমি বলার যোগ্য নই, তবে আমি অনুমান করব না, কারণ অপ্রতিরোধ্যভাবে বেশিরভাগ equals()অপারেশনগুলি স্ট্রিং থেকে স্ট্রিংয়ের কাজ হবে, সুতরাং সেই পরীক্ষাটি প্রায় সর্বদা পাস করা হয়। প্রকৃতপক্ষে, "==" এর ভিতরে অগ্রাধিকার দেওয়া String.equals()একটি আত্মবিশ্বাসকে বোঝায় যে আপনি প্রায়শই স্ট্রিংকে একই প্রকৃত বস্তুর সাথে তুলনা করছেন।
আমি আশা করি যে নিম্নোক্ত রেখাগুলি "মিথ্যা" ফলাফলের ফলে কারও অবাক না হয়ে:
Integer i = 1;
System.out.println("1".equals(i));
কিন্তু যদি আপনি পরিবর্তন iকরতে i.toString()দ্বিতীয় লাইন, অবশ্যই এটা true।
আপনি যে জায়গাগুলিতে ইন্টার্নিংয়ের মাধ্যমে কোনও সুবিধার জন্য আশা করতে পারেন সেগুলি অন্তর্ভুক্ত রয়েছে Setএবং Mapস্পষ্টতই। আমি আশা করি যে ইন্টার্নযুক্ত স্ট্রিংগুলিতে তাদের হ্যাশকোডগুলি ক্যাশেড রয়েছে ... আমি মনে করি এটির প্রয়োজন হবে। এবং আমি আশা করি যে আমি আমার কাছে এক মিলিয়ন ডলার উপার্জন করতে পারে এমন ধারণাটি সরিয়ে নেই। :-)
মেমরির ক্ষেত্রে এটিও সুস্পষ্ট যে আপনার স্ট্রিংসের আয়তন বড় হলে বা আপনি যদি নিজের প্রোগ্রামের কোড দ্বারা ব্যবহৃত মেমরিটি খুব ছোট করতে চান তবে এটি একটি গুরুত্বপূর্ণ সীমা। যদি আপনার ডিস্টিস্টিন্ট-স্ট্রিংসের পরিমাণ খুব বড় হয়, তবে এগুলি পরিচালনা করতে ডেডিকেটেড ডেটাবেস প্রোগ্রাম কোড এবং একটি পৃথক ডাটাবেস সার্ভার ব্যবহার করার সময় বিবেচনা করা উচিত। তেমনি, যদি আপনি এটির স্ট্রিংগুলি মোটেও না সঞ্চয় করে একটি ছোট প্রোগ্রামকে (যে একসাথে 10000 দৌড়ে চালানো দরকার) উন্নতি করতে পারেন।
এটি একটি নতুন স্ট্রিং তৈরি করা এবং এটির intern()পরিবর্তে সরাসরি তার বিকল্পের জন্য ফেলে দেওয়ার পক্ষে অপব্যয় বোধ করে তবে ডুপ্লিকেট স্ট্রিংটি বাদ দেওয়া ছাড়া একটি পরিষ্কার বিকল্প নেই। সুতরাং সত্যিই কার্যকরকরণের খরচটি ইন্টার্ন পুলে আপনার স্ট্রিং সন্ধান করা এবং তারপরে আবর্জনা সংগ্রহকারীকে আসলটি নিষ্পত্তি করার অনুমতি দেয়। এবং যদি এটি স্ট্রিং আক্ষরিক হয় তবে এটি ইতিমধ্যে যেভাবেই ইন্টার্ন-এড হয়।
আমি ভাবছি যে intern()কিছু স্ট্রিং এবং তাদের অবজেক্টের রেফারেন্স পুলটিতে ইতিমধ্যে রয়েছে কিনা তা সনাক্ত করার জন্য দূষিত প্রোগ্রাম কোড দ্বারা অপব্যবহার করা যায় কিনা intern(), এবং তাই জাভা সেশনে অন্য কোথাও উপস্থিত রয়েছে, যখন এটি জানা না যায়। তবে এটি তখনই সম্ভব হবে যখন প্রোগ্রাম কোডটি ইতিমধ্যে বিশ্বাসযোগ্য উপায়ে ব্যবহার করা হচ্ছে, আমার ধারণা। তবুও, আপনার এটিএম পিন নম্বরগুলি সংরক্ষণ এবং মনে রাখার জন্য আপনি আপনার প্রোগ্রামে অন্তর্ভুক্ত তৃতীয় পক্ষের লাইব্রেরিগুলি বিবেচনা করার মতো বিষয়!