Double.parseDouble (নাল) এবং Integer.parseInt (নাল) বিভিন্ন ব্যতিক্রম কেন ফেলে?


92

Double.parseDouble (নাল) এবং Integer.parseInt (নাল) বিভিন্ন ব্যতিক্রম কেন ফেলে?

এটি কি কোনও accidentতিহাসিক দুর্ঘটনা বা উদ্দেশ্যমূলক? ডকুমেন্টেশনটি পরিষ্কারভাবে দুটি ধরণের ব্যতিক্রম Double.parseDouble(...)এবং এর জন্য উল্লেখ করে Integer.parseInt()তবে এটি বেমানান বলে মনে হয়:

Integer.parseInt(null); // throws java.lang.NumberFormatException: null

যাহোক

Double.parseDouble(null); // throws java.lang.NullPointerException

4
@ অ্যাকিলো: এখানে doubleআদিম ডকস রয়েছে
oআরাকল.

4
সংশ্লিষ্ট পদ্ধতির উত্স কোডটি পরীক্ষা করা, এটি কেবল একটি অসঙ্গতি বলে মনে হচ্ছে। parseDoubleএকটি নাল চেক করে না, এবং যখন একটি এনপিই এটির মুখোমুখি হয় কেবল তখনই ছুঁড়ে দেয় parseInt, তবে ইনপুট স্ট্রিংটি চেক করা হয় null। তাদের আলাদা আচরণ করার কোনও ভাল কারণ আমি দেখতে পাচ্ছি না।
নিলশ

আমি পরীক্ষা করে দেখেছি যে তারা একই নম্বর নম্বর ফর্ম্যাট এক্সেক্সশনটি ফেলে দেয়।
twlkyao

উত্তর:


67

একই ব্যতিক্রমগুলি নালার জন্য নিক্ষেপ করা আশা করা যুক্তিসঙ্গত; যাইহোক, এই এপিআই খুব পুরানো এবং এই মুহুর্তে পরিবর্তন করা সম্ভব হবে না।

এবং:

যেহেতু ব্যতিক্রম আচরণটি দীর্ঘস্থায়ী এবং জাভাডক-তে নির্দিষ্ট রয়েছে, তাই এই মুহুর্তে উভয়ের পদ্ধতির আচরণ পরিবর্তন করা অবৈধ। বন্ধ করা ঠিক হবে না।

যেমনটি নেওয়া হয়েছে: বাগ রিপোর্ট: পূর্ণসংখ্যা.পার্সইন্ট () এবং Double.parseDouble () নালার উপরে বিভিন্ন ব্যতিক্রম ছুঁড়ে ফেলে।

অন্যদের মতো বলেছেন: এটি সম্ভবত বিভিন্ন লেখক তৈরি করেছেন।


4
সম্পর্কিত এবং আকর্ষণীয় বাগ প্রতিবেদন: bugs.sun.com/view_bug.do?bug_id=6463998 জাভা 6 এর মতো মনে হয়, ডাবল / ফ্লোট শ্রেণীর পার্স পদ্ধতি এনপিই নিক্ষেপ করে।
nhahtdh

4
Amusingly, মন্তব্য বলেন যে এই কার্যকারিতা ছিল "খুব পুরানো" সময়ে, এবং যে এখন 15 বছর আগে।
সাউথপা হরে

এই অসঙ্গতি সম্ভবত জাভা 1.0 এ উত্পন্ন হয়। দুর্ভাগ্যক্রমে, এটি যাচাই করা কঠিন হবে। আমি মনে করি না জাভা 1.0 ডাউনলোডের জন্য উপলব্ধ, এবং এটি চালানোর জন্য আপনার উইন্ডোজ 95 / এনটি বাক্সের প্রয়োজন হবে। বা একটি প্রাচীন স্পার্ক মেশিন))
স্টিফেন সি

59

দ্রষ্টব্য: এই পোস্টের সমস্ত কিছুই জাভা 7-বি 147 এর উত্সে

Double.parseDouble()একটি সান গ্রন্থাগারে যায় (মধ্যে sun.misc.FloatingDecimal) প্রথম গুরুত্বপূর্ণ জিনিসটি ঘটে:

in = in.trim(); // don't fool around with white space.
                // throws NullPointerException if null

Integer.parseInt()Integerক্লাসে ম্যানুয়ালি করা হয় । প্রথম যে গুরুত্বপূর্ণটি ঘটে তা হ'ল:

if (s == null) {
    throw new NumberFormatException("null");
}

আমি অনুমান করব যে সেখানে দুটি ভিন্ন লেখক রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.