2011-10-28 26 views
28

यह शायद कहीं से पूछा गया था लेकिन मुझे यह नहीं मिला। क्या कोई स्पष्टीकरण दे सकता है कि यह कोड 1 को क्यों संकलित करता है और प्रिंट करता है?अजीब जावा व्यवहार आदिम प्रकारों के साथ

long i = (byte) + (char) - (int) + (long) - 1; 
System.out.println(i); 
+0

यहां अजीब क्या है? –

+1

@ प्रिंस जोहान वेस्ले: अच्छा, यह अजीब लग रहा है, है ना? भले ही उत्तर सरल है, और मैंने प्रश्न पोस्ट करने के बाद इसे सही समझा। –

+1

* मुझे लगता है कि यह अजीब लग रहा है; मुझे कोई समस्या नहीं है कि कोई उस पर ध्यान देगा और विश्वास नहीं करेगा कि यह कानूनी जावा भी था। –

उत्तर

42

यह इस रूप में पार्स किया जा रहा है:

long i = (byte)(+(char)(-(int)(+(long)(-1)))); 

जहां सभी + और - ऑपरेटरों एकल हैं + या -

इस मामले में, 1 को दो बार अस्वीकार कर दिया जाता है, इसलिए यह 1 के रूप में प्रिंट करता है।

5

क्योंकि दोनों '+' और '-' unary operators हैं, और कलाकार उन यूनिटों के संचालन पर काम कर रहे हैं। बाकी गणित है।

5

एकल ऑपरेटरों और कास्टिंग :)

+1 कानूनी

(बाइट) + 1 एक बाइट के लिए +1 कास्टिंग है।

स्नीकी! मुझे सोचने को मजबूर किया।

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