আমি জানি না কেন এটি দীর্ঘ ডেটা টাইপটিকে কোনও int হিসাবে উল্লেখ করছে
এইটা না. আপনার সংকলক বার্তাগুলির উপর নির্ভর করা শিখতে হবে (বিশেষত যখন সে বুদ্ধিমান, আধুনিক সংকলক এবং প্রাচীন সি / সি ++ সংকলক নয়)। যদিও তারা যে ভাষায় কথা বলে তা কখনও কখনও বোঝা শক্ত হতে পারে তবে তারা সাধারণত আপনার কাছে মিথ্যা বলে না।
এর আবার দেখুন:
ইতিমধ্যে 9223372036854775807 এর আক্ষরিক সীমার বাইরে।
মনে রাখবেন, এটি না আপনার পরিবর্তনশীল উল্লেখ testLong
বা টাইপ long
যে কোন স্থানে, তাই এটা না আরম্ভের সম্পর্কে। সমস্যাটি অন্য কোনও সময়ে দেখা যাচ্ছে বলে মনে হয়।
এখন বার্তার কিছু অংশ তদন্ত করতে দিন:
int
আমাদের বলে যে সে কিছু হিসাবে একটি হিসাবে আচরণ করতে চায় int
মান (যা আপনি চেয়েছিলেন তা নয়!)
- "পরিসীমা ছাড়াই" বেশ স্পষ্ট: কিছু প্রত্যাশিত ব্যাপ্তির মধ্যে নেই (সম্ভবত এটির মধ্যে
int
)
- "আক্ষরিক": এখন এটি আকর্ষণীয়: আক্ষরিক কী?
আমি এক মুহুর্তের জন্য আক্ষরিক বিষয়ে কথা বলার জন্য আরামদায়ক তালিকাটি ছেড়ে দেব: আক্ষরিকাগুলি এমন জায়গা যা আপনার কোডে আপনার কিছু মূল্য আছে। আছে String
লিটারেল, int
লিটারেল, class
লিটারেল ইত্যাদি। প্রতিবার আপনি আপনার কোডে একটি মান স্পষ্টভাবে উল্লেখ করলে এটি আক্ষরিক।
সুতরাং এটি ভেরিয়েবলের ঘোষণাপত্রের বিষয়ে আসলে আপনাকে কড়া নাড়ায়, তবে সংখ্যাটি নিজেই, মানটি এটি আপনাকে হ্রাস করে।
আপনি সহজেই একই আক্ষরিক প্রসঙ্গে যেখানে long
ও এবং int
সমানভাবে গ্রহণযোগ্য তা প্রাসঙ্গিকভাবে যাচাই করতে পারেন :
System.out.println(9223372036854775807);
PrintStream.println
যে কোনও একটিint
বা একটিlong
(বা অন্য কোনও কিছু) নিতে পারে। সুতরাং যে কোড ঠিক আছে, ঠিক করা উচিত?
নং ওয়েল, হয়তো এটা করা উচিত , কিন্তু নিয়ম অনুযায়ী এটা হল নয়।
সমস্যাটি হ'ল "কিছু অঙ্ক" int
আক্ষরিক হিসাবে সংজ্ঞায়িত এবং সুতরাং এটি দ্বারা সংজ্ঞায়িত ব্যাপ্তিতে থাকতে হবে int
।
আপনি যদি একটি লিখতে চান long
আক্ষরিক, তারপর আপনি যে সংযোজন দ্বারা স্পষ্ট করতে হবে L
(অথবা ছোট হাতের l
, কিন্তু আমি অত্যন্ত সুপারিশ আপনি সবসময় উপরের কেস বৈকল্পিক ব্যবহার, কারণ এটি অনেক সহজ একটি জন্য ভুল পড়া এবং কঠিন থেকে1
)।
নোট করুন যে float
(পোস্টফিক্স F
/ f
) এবং double
(পোস্টফিক্স D
/d
) এর ।
পার্শ্ব দ্রষ্টব্য: আপনি বুঝতে পারবেন যে কোনও byte
বা short
আক্ষরিক নেই এবং আপনি এখনও মানগুলি (সাধারণত int
আক্ষরিক) byte
এবং short
ভেরিয়েবলগুলি নির্ধারণ করতে পারেন : এসাইনমেন্ট রূপান্তর সম্পর্কে rules 5.2 এ বিশেষ নিয়মের কারণে এটি সম্ভব : তারা বৃহত্তর ধরণের ধ্রুবক প্রকাশের অ্যাসাইনমেন্টের অনুমতি দেয় থেকে byte
, short
, char
বা int
যদি মানের প্রকার মধ্যে পরিসীমা আছে।