2012-08-31 15 views
5
public class Main { 
    public static void main(String[] args){ 
     System.out.println(X.Y.Z); 
    } 
} 

class X { 
    static class Y { 
     static String Z = "Result 1"; 
    } 
    static C Y = new C(); 
} 

class C { 
    String Z = "Result 2"; 
} 

कभी-कभी आउटपुट "Result 1" होता है और कभी-कभी आउटपुट "Result 2" होता है। क्या आप व्यख्या कर सकते हैं?निष्पादन के बाद विभिन्न आउटपुट

मैं JDK 1.6_33 का उपयोग कर रहा हूं।

+0

जेडीके 1.6.24 के साथ, मुझे हर बार 'परिणाम 2' मिलता है। – mellamokb

+0

@mellamokb मुझे भी। हर बार। –

+1

मैंने जेडीके 1.6.33 डाउनलोड किया, और संकलित और 20 बार कोड स्निपेट चलाया। हर बार परिणाम 2 'परिणाम मिला। – mellamokb

उत्तर

9

यह जावा पज़लर # 68 है - इसे हमेशा Result 2 प्रिंट करना चाहिए। उद्धरण:

यह पता चला है कि एक नियम है जो इन परिस्थितियों में कार्यक्रम व्यवहार को नियंत्रित करता है। जब चर और एक प्रकार का एक ही नाम होता है और दोनों दायरे में होते हैं, तो परिवर्तनीय नाम प्राथमिकता [जेएलएस 6.5.2] लेता है। परिवर्तनीय नाम टाइप नाम [जेएलएस 6.3.2] अस्पष्ट करने के लिए कहा जाता है। इसी तरह, परिवर्तनीय और प्रकार के नाम पैकेज नाम अस्पष्ट कर सकते हैं। यह नियम वास्तव में अस्पष्ट है, और किसी भी प्रोग्राम पर निर्भर करता है जो इसके पाठकों को भ्रमित करने की संभावना है।

+4

और इस पर निर्भर कोड लिखने वाले किसी भी व्यक्ति को टैर और पंख में घुमाया जाना चाहिए। – biziclop

+0

मैं इस जावा पहेली कहां देख सकता हूं? उत्तर के लिए – Ilya

+0

http://www.javapuzzlers.com/ – assylias

संबंधित मुद्दे

 संबंधित मुद्दे