2013-03-13 6 views
7

संपादित करें 1यदि आप + और ++ ऑपरेटरों के बीच की जगह को हटाते हैं तो क्या होता है?

अस्वीकरण: मुझे पता है कि+++वास्तव में एक ऑपरेटर लेकिन स्पेस के बिना + और ++ ऑपरेटरों नहीं है। मुझे यह भी पता है कि इसका उपयोग करने का कोई कारण नहीं है; यह सवाल सिर्फ जिज्ञासा से बाहर है।


तो, मैं अगर + और ++var के बीच की जगह जावा में आवश्यक है को देखने के लिए इच्छुक हूँ।

int i = 0; 
System.out.println(i); 
i = i +++i; 
System.out.println(i); 

यह बाहर प्रिंट:

0 
1 

जो के रूप में मैं, उम्मीद करेंगे बस के रूप में अगर वहाँ पहले और दूसरे + के बीच एक रिक्ति थे काम करता है

यहाँ अपने परीक्षण कोड है।

फिर, मैं इसे स्ट्रिंग संयोजन के साथ करने की कोशिश की:

String s1 = "s " + ++i; 
System.out.println(s1); 
// String s2 = "s " +++i; 

यह बाहर प्रिंट:

s 2 

लेकिन अगर तीसरी लाइन uncommented है, कोड संकलन नहीं करता है, त्रुटि के साथ:

Problem3.java:13: unexpected type 
required: variable 
found : value 
    String s2 = "s " +++i; 
       ^
Problem3.java:13: operator + cannot be applied to <any>,int 
    String s2 = "s " +++i; 
        ^

स्ट्रिंग concatenation और पूर्णांक जोड़ने के बीच व्यवहार में अंतर क्या कारण है ition?


संपादित 2

के रूप में, Abhijit's follow-up question में चर्चा नियम यह है कि लोगों का उल्लेख किया है (बड़ा टोकन पहले पार्स किया जा ++, पहले छोटे टोकन ++) this presentation में चर्चा की है जहां यह प्रतीत होता है मन्ची मन्की नियम कहा जाता है।

क्या ट्रिपल प्लस acutually करता है:

+1

और simmilary मैं = मैं मैं +++++ किया जाएगा; मान्य नहीं है लेकिन i = i ++ +++; है। – Jayamohan

+0

चूंकि यह ऑपरेटर नहीं है, यह पूछता है कि यह कैसे काम करता है, यह समझ में नहीं आता है। असली सवाल नहीं है। – EJP

+1

अनुवर्ती प्रश्न [क्या '+++' सिर्फ एक पोस्ट-फ़िक्स वृद्धि है जिसके बाद इंफिक्स (हमेशा) है?] (Http://stackoverflow.com/q/15382171/977038) – Abhijit

उत्तर

5

जब स्रोत पार्स करने, इसलिए जब यह मुठभेड़ों +++, यह इसके ++ + के रूप में लेता है संकलक सबसे लंबे समय तक संभव टोकन उत्पन्न करता है।

तो

a +++ b 
का कोड

हमेशा एक ही रूप में

(a++) + b 
+1

+1। सबसे लंबे टोकन नियम के लिए – Morwenn

+0

+1। – chm

2

ट्रिपल प्लस एक ऑपरेटर ही नहीं है, यह दो संयुक्त ऑपरेटरों है

एक +++ 1 == एक ++ + 1;

आप जो करने का प्रयास कर रहे हैं वह है ++ एक स्ट्रिंग, जो अपरिभाषित है।

कभी भी अपने कोड में रिक्त स्थान के बिना +++ का उपयोग न करें; शायद ही कोई यह जानता होगा कि यह क्या करता है (वेब ​​से परामर्श किए बिना)। इसके अलावा, एक हफ्ते के बाद, आप नहीं जान पाएंगे कि यह वास्तव में क्या करता है।

13

कोई +++ ऑपरेटर नहीं है। आपके पास एक पोस्टफिक्स ++ ऑपरेटर है जिसके बाद एक infix + ऑपरेटर है। यह एक संकलन त्रुटि है क्योंकि पोस्टफिक्स ++ केवल एक चर पर लागू किया जा सकता है, और "s " एक चर नहीं है।

चूंकि आप वास्तव में एक इंफिक्स + ऑपरेटर का मतलब है, उसके बाद उपसर्ग ++ ऑपरेटर के बाद, आपको ऑपरेटर के बीच स्थान डालना होगा।

असल में, आपको इसे किसी भी तरह करना चाहिए। +++ पठनीयता के खिलाफ एक अपराध है !!!

1

+++ अपने आप से एक ऑपरेटर नहीं है। i के पूर्व वेतन वृद्धि मूल्य में

i = i +++i; परिणाम है, तो i का मूल्य में जोड़ने और i में भंडारण।

स्ट्रिंग के साथ, + का मतलब अतिरिक्त नहीं है, इसलिए आप स्ट्रिंग और पूर्णांक को एकसाथ संयोजित करने का प्रयास कर रहे हैं।

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

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