क्या जावा में ++ x और x ++ के बीच अंतर है?
क्या जावा में ++ x और x ++ के बीच अंतर है?
जवाबों:
++ x को प्रीइंकेरमेंट कहा जाता है जबकि x ++ को पोस्टइनक्रीमेंट कहा जाता है।
int x = 5, y = 5;
System.out.println(++x); // outputs 6
System.out.println(x); // outputs 6
System.out.println(y++); // outputs 5
System.out.println(y); // outputs 6
हाँ
++ x x का मान बढ़ाता है और फिर x
x लौटाता है x का मान लौटाता है और फिर वेतन वृद्धि करता है
उदाहरण:
x=0;
a=++x;
b=x++;
कोड चलाने के बाद a और b दोनों 1 होंगे लेकिन x 2 होगा।
इन्हें पोस्टफ़िक्स और प्रीफ़िक्स ऑपरेटर्स के रूप में जाना जाता है। दोनों चर में 1 जोड़ देंगे लेकिन कथन के परिणाम में अंतर है।
int x = 0;
int y = 0;
y = ++x; // result: y=1, x=1
int x = 0;
int y = 0;
y = x++; // result: y=0, x=1
suffix
?
हाँ,
int x=5;
System.out.println(++x);
प्रिंट करेंगे 6
और
int x=5;
System.out.println(x++);
छप जाएगा 5
।
मैं इसके हालिया डुप्पर में से एक से यहां उतरा , और हालांकि यह प्रश्न उत्तर से अधिक है, मैं कोड को हटाने और "अभी तक एक और जवाब" जोड़ने में मदद नहीं कर सका :-)
सटीक होने के लिए (और शायद, थोड़ा पांडित्य),
int y = 2;
y = y++;
इसमें संकलित है:
int y = 2;
int tmp = y;
y = y+1;
y = tmp;
यदि आप javac
इस Y.java
वर्ग:
public class Y {
public static void main(String []args) {
int y = 2;
y = y++;
}
}
और javap -c Y
, आपको निम्नलिखित jvm कोड मिलता है (मैंने जावा वर्चुअल मशीन विनिर्देश की मदद से मुख्य विधि पर टिप्पणी करने की अनुमति दी है ):
public class Y extends java.lang.Object{
public Y();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_2 // Push int constant `2` onto the operand stack.
1: istore_1 // Pop the value on top of the operand stack (`2`) and set the
// value of the local variable at index `1` (`y`) to this value.
2: iload_1 // Push the value (`2`) of the local variable at index `1` (`y`)
// onto the operand stack
3: iinc 1, 1 // Sign-extend the constant value `1` to an int, and increment
// by this amount the local variable at index `1` (`y`)
6: istore_1 // Pop the value on top of the operand stack (`2`) and set the
// value of the local variable at index `1` (`y`) to this value.
7: return
}
इस प्रकार, हमारे पास अंततः है:
0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp
जब कंप्यूटर वास्तव में क्या करता है पर विचार ...
++ x: मेमोरी से एक्स लोड, इंक्रीमेंट, उपयोग, मेमोरी में वापस स्टोर करें।
x ++: मेमोरी से x लोड करें, उपयोग करें, इंक्रीमेंट करें, मेमोरी में वापस स्टोर करें।
विचार करें: a = 0 x = f (a ++) y = f (++ a)
जहाँ फ़ंक्शन f (p) रिटर्न p + 1 है
x 1 (या 2) होगा
y 2 होगा (या 1)
और उसी में समस्या है। संकलक के लेखक ने पुनर्प्राप्ति के बाद, उपयोग के बाद, या भंडारण के बाद पैरामीटर पारित किया।
आम तौर पर, बस x = x + का उपयोग करें। यह सरल तरीका है।
जावा में x ++ और ++ x के बीच अंतर है
++ x एक उपसर्ग रूप है: यह चर अभिव्यक्ति को बढ़ाता है और फिर अभिव्यक्ति में नए मूल्य का उपयोग करता है।
उदाहरण के लिए यदि कोड में उपयोग किया जाता है:
int x = 3;
int y = ++x;
//Using ++x in the above is a two step operation.
//The first operation is to increment x, so x = 1 + 3 = 4
//The second operation is y = x so y = 4
System.out.println(y); //It will print out '4'
System.out.println(x); //It will print out '4'
x ++ एक उपसर्ग रूप है: चर मान का उपयोग पहले अभिव्यक्ति में किया जाता है और फिर ऑपरेशन के बाद इसे बढ़ाया जाता है।
उदाहरण के लिए यदि कोड में उपयोग किया जाता है:
int x = 3;
int y = x++;
//Using x++ in the above is a two step operation.
//The first operation is y = x so y = 3
//The second operation is to increment x, so x = 1 + 3 = 4
System.out.println(y); //It will print out '3'
System.out.println(x); //It will print out '4'
आशा है कि यह स्पष्ट है। उपरोक्त कोड के साथ चलना और खेलना आपकी समझ में मदद करना चाहिए।
हाँ।
public class IncrementTest extends TestCase {
public void testPreIncrement() throws Exception {
int i = 0;
int j = i++;
assertEquals(0, j);
assertEquals(1, i);
}
public void testPostIncrement() throws Exception {
int i = 0;
int j = ++i;
assertEquals(1, j);
assertEquals(1, i);
}
}
हां, वापस लौटाया गया मूल्य क्रमशः वृद्धि के बाद और पहले मूल्य है।
class Foo {
public static void main(String args[]) {
int x = 1;
int a = x++;
System.out.println("a is now " + a);
x = 1;
a = ++x;
System.out.println("a is now " + a);
}
}
$ java Foo
a is now 1
a is now 2
ठीक है, मैं यहां उतरा क्योंकि मैं हाल ही में क्लासिक स्टैक कार्यान्वयन की जांच करते समय एक ही मुद्दे पर आया था। बस एक अनुस्मारक है कि यह स्टैक के सरणी आधारित कार्यान्वयन में उपयोग किया जाता है, जो कि लिंक-लिस्ट एक की तुलना में थोड़ा तेज है।
नीचे दिए गए कोड, पुश और पॉप की जांच करें।
public class FixedCapacityStackOfStrings
{
private String[] s;
private int N=0;
public FixedCapacityStackOfStrings(int capacity)
{ s = new String[capacity];}
public boolean isEmpty()
{ return N == 0;}
public void push(String item)
{ s[N++] = item; }
public String pop()
{
String item = s[--N];
s[N] = null;
return item;
}
}
हां, एक अंतर है, एक्स ++ (पोस्टिंक्रेमेंट) का इंसेशन, एक्स के मूल्य को अभिव्यक्ति में इस्तेमाल किया जाएगा और एक्स को एक्सप्रेशन के मूल्यांकन के बाद 1 से बढ़ा दिया जाएगा, दूसरी ओर ++ एक्स (प्रीइंक्रिमेंट), एक्स + 1 का प्रयोग अभिव्यक्ति में किया जाएगा। एक उदाहरण लें:
public static void main(String args[])
{
int i , j , k = 0;
j = k++; // Value of j is 0
i = ++j; // Value of i becomes 1
k = i++; // Value of k is 1
System.out.println(k);
}
प्रश्न पहले से ही उत्तर दिया गया है, लेकिन मुझे अपनी तरफ से भी जोड़ने की अनुमति है।
सबसे पहले ++ का मतलब होता है एक से बढ़ाना और - का मतलब होता है एक से बढ़ाना ।
अब x ++ का अर्थ है इस रेखा के बाद Increment x और इस रेखा से पहले ++ x का अर्थ है Increment x ।
इस उदाहरण की जाँच करें
class Example {
public static void main (String args[]) {
int x=17,a,b;
a=x++;
b=++x;
System.out.println(“x=” + x +“a=” +a);
System.out.println(“x=” + x + “b=” +b);
a = x--;
b = --x;
System.out.println(“x=” + x + “a=” +a);
System.out.println(“x=” + x + “b=” +b);
}
}
यह निम्नलिखित आउटपुट देगा:
x=19 a=17
x=19 b=19
x=18 a=19
x=17 b=17
I ++ के साथ, इसे पोस्टइन्क्रिमेंट कहा जाता है, और मूल्य का उपयोग उस संदर्भ में किया जाता है, जो तब बढ़ा हुआ होता है; ++ i प्रीइंकेरिमेंट पहले मूल्य बढ़ाता है और फिर इसे संदर्भ में उपयोग करता है।
यदि आप इसे किसी भी संदर्भ में उपयोग नहीं कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता कि आप क्या उपयोग करते हैं, लेकिन कन्वेंशन द्वारा पोस्टिंक्रेमेंट का उपयोग किया जाता है।
एक बहुत बड़ा अंतर है।
जैसा कि अधिकांश उत्तरों ने पहले ही सिद्धांत को इंगित किया है, मैं एक आसान उदाहरण बताना चाहूंगा:
int x = 1;
//would print 1 as first statement will x = x and then x will increase
int x = x++;
System.out.println(x);
अब देखते हैं ++x
:
int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);