জাভা 1.5 হিসাবে, আপনি অনেক পরিস্থিতিতে অনেক Integer
সঙ্গে বিনিময় করতে পারেন int
।
তবে আমি আমার কোডে একটি সম্ভাব্য ত্রুটি পেয়েছি যা আমাকে খানিকটা অবাক করেছে।
নিম্নলিখিত কোড:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
মানগুলি সমান হয়ে গেলে ভুলভাবে অমিল স্থাপন করতে দেখা গেছে, যদিও আমি কোন পরিস্থিতিতে নির্ধারণ করতে পারি না। আমি Eclipse এ একটি ব্রেকপয়েন্ট স্থাপন করেছি এবং দেখেছি যে Integer
মানগুলি 137 ছিল এবং আমি বুলিয়ান অভিব্যক্তিটি পরীক্ষা করেছিলাম এবং এটি বলেছিল যে এটি মিথ্যা ছিল, কিন্তু যখন আমি এটির উপরে পদার্পণ করেছি, তখন এটি সত্যের সাথে মিল রেখেছিল।
শর্তসাপেক্ষে পরিবর্তন করা:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
সমস্যা সমাধান।
কেন এমনটা হয়েছে এ সম্পর্কে কেউ কিছু আলোকপাত করতে পারেন? এখনও অবধি আমি আমার পিসিতে লোকালহোস্টে কেবল আচরণটি দেখেছি। এই বিশেষ ক্ষেত্রে, কোডটি সফলভাবে প্রায় 20 টি তুলনা করে এটি পেরেছিল, তবে 2 এ ব্যর্থ হয়েছিল consistent সমস্যাটি ধারাবাহিকভাবে পুনরুত্পাদনযোগ্য ছিল।
যদি এটি একটি প্রচলিত সমস্যা হয় তবে এটি আমাদের অন্যান্য পরিবেশে (দেব এবং পরীক্ষা) ত্রুটি ঘটানো উচিত, তবে এখনও অবধি, এই কোড স্নিপেট কার্যকর করার জন্য শত শত পরীক্ষার পরেও কেউ এই সমস্যাটির খবর দেয়নি।
এটি এখনও ==
দুটি Integer
মান তুলনা করতে বৈধ নয় ?
নীচে সমস্ত সূক্ষ্ম উত্তর ছাড়াও, নিম্নলিখিত স্ট্যাকওভারফ্লো লিঙ্কটিতে বেশ কয়েকটি অতিরিক্ত তথ্য রয়েছে। এটি আসলে আমার মূল প্রশ্নের উত্তর দিতে পারে, তবে আমি আমার প্রশ্নে অটোবক্সিংয়ের উল্লেখ না করায় এটি নির্বাচিত পরামর্শগুলিতে প্রদর্শিত হয়নি:
সংকলক / জেভিএম কেন কেবল অটোবক্সিংকে "কেবলমাত্র কাজ" করতে পারে না?