আনইনিটালাইজড অবজেক্ট বনাম অবজেক্ট এনবিএল-তে শুরু করা


95

আমি জাভাতে কাজ করছি।

আমি সাধারণত কিছু জিনিস সেটআপ করি:

public class Foo {
    private SomeObject someName;

    // do stuff

    public void someMethod() {
        if (this.someName != null) {
            // do some stuff
        }
    }
}

প্রশ্নটি হ'ল: someNameএই উদাহরণটিতে কি সমান null, আমি reliably for all objectsনাল-চেকিং অবিচ্ছিন্ন জিনিসগুলি সঠিক হতে পারে তা ধরে নিতে পারি?

উত্তর:


116

সুস্পষ্টভাবে, রেফারেন্স প্রকারের স্ট্যাটিক এবং দৃষ্টান্তের উদাহরণস্বরূপ উভয় সদস্যই nullজাভা দ্বারা সেট করা আছে set একই নিয়ম অ্যারে সদস্যদের জন্য প্রযোজ্য।

থেকে জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন , বিভাগ 4.12.5:

ভেরিয়েবলের প্রাথমিক মান

একটি প্রোগ্রামের প্রতিটি ভেরিয়েবলের মানটি ব্যবহার করার আগে অবশ্যই একটি মান থাকতে হবে:

প্রতিটি বর্গ ভেরিয়েবল, উদাহরণ পরিবর্তনশীল, বা অ্যারের উপাদান তৈরি করা হলে এটি একটি ডিফল্ট মান দিয়ে শুরু করা হয়

[...] সমস্ত রেফারেন্স ধরণের জন্য, ডিফল্ট মান null

নোট করুন যে উপরের নিয়মটি স্থানীয় ভেরিয়েবলগুলি বাদ দেয়: সেগুলি অবশ্যই স্পষ্টভাবে শুরু করা উচিত, অন্যথায় প্রোগ্রামটি সংকলন করবে না।


এটি কীভাবে প্রযোজ্য, উদাহরণস্বরূপ char,? আমি করতে পারি char test;তবে নাchar test = null;
xorinzor

4
@xorinzor আপনি ধার্য করতে পারেন না nullকরার charকারণ এটি একটি আদিম প্রকার। এছাড়াও পরে char test;কোনও কাজ না করে আপনি কোনও পদ্ধতির ভিতরে কাজ করতে পারবেন না test। আপনি char test='a'চাইলে করতে পারেন, বা char test;এর ডিফল্ট মান পেতে সদস্যের ঘোষণায় এটি রেখে দিতে পারেন '\0'
সের্গেই কালিনিচেনকো

15

একটি এমন Objectরেফারেন্স ঘোষিত হয়েছে কিন্তু instantiated না, তার মান null


8
শুধুমাত্র একটি শ্রেণীর উদাহরণ ক্ষেত্র হিসাবে।
সোতিরিওস ডেলিমনোলিস

4
@ সোটিরিওসডেলিমানলিস আপনি কি দয়া করে বিস্তারিত বলতে পারবেন? আমি শেখার চেষ্টা করছি :)
স্নেকডোক

4
@ স্নেকডোক আপনি যদি কোনও পদ্ধতির অংশে কোনও অবজেক্ট ঘোষণা করেন, আপনি যদি প্রথমটি আরম্ভ না করে এটি ব্যবহার করার চেষ্টা করেন তবে একটি সংকলন ত্রুটি পাবেন।
সোতিরিওস ডেলিমনলিস

9
এখানে সুনির্দিষ্ট হওয়ার উপযুক্ত - আপনি কখনই কোনও বিষয় ঘোষণা করবেন না। আপনি একটি পরিবর্তনশীল ঘোষণা । তারা একই জিনিস না।
জন স্কিটি

7
@ সোতিরিওসডেলিমনোলিস সত্যিই একটি পুরানো আলোচনা আনার জন্য দুঃখিত, তবে কেন আপনি কেবল nullউদাহরণের ক্ষেত্র পছন্দ করার পরিবর্তে এটি সংকলন ত্রুটি সৃষ্টি করার সিদ্ধান্ত নিয়েছিলেন তা সম্পর্কে আপনার কোনও রেফারেন্স হতে পারে ?
চাইল্ডফসূং

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