अनलिमिटेड ऑब्जेक्ट बनाम ऑब्जेक्ट को NULL से शुरू किया गया


93

मैं जावा में काम कर रहा हूँ।

मैं आमतौर पर कुछ वस्तुओं को इस तरह से सेटअप करता हूं:

public class Foo {
    private SomeObject someName;

    // do stuff

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

प्रश्न यह है: क्या someNameइस उदाहरण में समान है null, क्योंकि मैं reliably for all objectsमान सकता हूं कि अशक्त-जाँच की गई असंगठित वस्तुएं सटीक होंगी?

जवाबों:


115

सही, संदर्भ प्रकार के स्थिर और आवृत्ति वाले दोनों सदस्य, जो प्रारंभ में स्पष्ट नहीं हैं, nullजावा द्वारा निर्धारित हैं । सरणी के सदस्यों के लिए भी यही नियम लागू होता है।

से जावा भाषा विशिष्टता , खंड 4.12.5:

चर के प्रारंभिक मान

किसी प्रोग्राम के हर वेरिएबल का वैल्यू यूज़ होने से पहले होना चाहिए:

प्रत्येक वर्ग चर, उदाहरण चर, या सरणी घटक जब इसे बनाया जाता है तो एक डिफ़ॉल्ट मान के साथ आरंभ किया जाता है

[...] सभी संदर्भ प्रकारों के लिए, डिफ़ॉल्ट मान है null

ध्यान दें कि उपरोक्त नियम स्थानीय चरों को शामिल नहीं करता है: उन्हें स्पष्ट रूप से प्रारंभ किया जाना चाहिए, अन्यथा कार्यक्रम संकलित नहीं होगा।


उदाहरण के लिए, यह कैसे लागू होता है char? मैं नहीं कर सकता char test;लेकिन नहींchar test = null;
xorinzor

1
@xorinzor आप असाइन नहीं कर सकते nullकरने के लिए charहै, क्योंकि यह एक आदिम प्रकार है। इसके अलावा, आप बाद में char test;बताए बिना एक विधि के अंदर नहीं कर सकते test। आप चाहें तो कर सकते हैं char test='a'या char test;डिफ़ॉल्ट मान प्राप्त करने के लिए सदस्य घोषणा में इसे छोड़ सकते हैं '\0'
dasblinkenlight

14

यदि एक Objectसंदर्भ घोषित किया गया है, लेकिन त्वरित नहीं है, तो इसका मूल्य है null


8
केवल एक वर्ग के उदाहरण क्षेत्र के रूप में।
सोतीरियोस डेलिमोलिस

1
@SotiriosDelimanolis क्या आप कृपया विस्तार से बता सकते हैं? मैं सीखने की कोशिश कर रहा हूँ :)
स्नेकडॉक

5
@SnakeDoc यदि आप एक विधि निकाय में एक वस्तु की घोषणा करते हैं, तो यदि आप इसे पहली बार शुरू किए बिना उपयोग करने का प्रयास करते हैं, तो आपको एक संकलन त्रुटि मिलेगी।
सॉटिरियोस डेलिमोनोलिस

9
यह यहाँ सटीक होने के लायक है - आप कभी भी एक वस्तु की घोषणा नहीं करते हैं। आप एक चर घोषित करते हैं । वे एक ही बात नहीं कर रहे हैं
जॉन स्कीट

7
@SotiriosDelimanolis वास्तव में एक पुरानी चर्चा को लाने के लिए खेद है, लेकिन क्या आप ऐसा करते हैं कि उन्होंने यह निर्णय लिया कि इसे एक संकलन त्रुटि का कारण बनना चाहिए, बजाय इसके कि इसे nullएक उदाहरण क्षेत्र की तरह शुरू किया जाए ?
बच्चा

-1
namespace Design
     {
              class Program
              {

                static void Main(string[] args)
                {
                  Logger obj1;   // By Default, the value of obj1 is null
                  Logger obj2 = new Logger();  // By Default the value of obj2 is 
                                               // Design.Logger which is not null
                  Console.WriteLine(obj2); 
                  Console.Read();
                }
              }

     class Logger
           {
             public Logger()
              {
                 Console.writeline("Called");
              }   
            }
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.