java - কেন "int i=2147483647+1;" ঠিক আছে, কিন্তু "বাইট বি=127+1;" কম্পাইলযোগ্য নয়?




byte (3)

@ এমবিডিডি একটি প্রমাণ হিসাবে:

নিম্নলিখিত কোড কম্পাইল:

byte c = (byte)(127 + 1);

যদিও এক্সপ্রেশন (127 + 1) int এবং byte প্রকারের বাইরে সুযোগের বাইরে ফলাফলটি byte ঢোকানো হয়। এই অভিব্যক্তি উত্পন্ন -128

কেন int i = 2147483647 + 1; ঠিক আছে, কিন্তু byte b = 127 + 1; কম্পাইলযোগ্য হয় না?


JLS3 # 5.2 অ্যাসাইনমেন্ট রূপান্তর

(পরিবর্তনশীল = অভিব্যক্তি)

উপরন্তু, এক্সপ্রেশন বাইটি, সংক্ষিপ্ত, গৃহস্থালি বা int টাইপের ধ্রুবক প্রকাশ (§15.28):

একটি সংকীর্ণ আদিম রূপান্তর ব্যবহার করা যেতে পারে যদি ভেরিয়েবলের ধরন বাইট, শর্ট, বা গৃহস্থালি হয় এবং ধ্রুবক অভিব্যক্তিটির মান পরিবর্তনশীলের ধরনতে প্রতিনিধিত্বযোগ্য।

এই ধারা ছাড়া, আমরা লিখতে সক্ষম হবে না

byte x = 0;
char c = 0;

কিন্তু আমরা কি এটা করতে পারব? আমি তাই মনে করি না. Primitives মধ্যে রূপান্তর বেশ কিছু যাদু আছে, এক খুব সতর্কতা অবলম্বন করা আবশ্যক। আমি লিখতে আমার পথে যেতে হবে

byte x = (byte)0;

কনস্ট্যান্টগুলিকে ইন্টস হিসাবে মূল্যায়ন করা হয়, তাই 2147483647 + 1 ওভারফ্লোস এবং আপনাকে একটি নতুন int প্রদান করে যা int- এর জন্য নির্ধারিত হয়, 127 + 1 এছাড়াও 128 int সমান হিসাবে মূল্যায়ন করা হয় এবং এটি byte জন্য নির্ধারিত হয় না।





int