জাভাতে x ++ এবং ++ x এর মধ্যে পার্থক্য আছে কি?


113

জাভাতে ++ x এবং x ++ এর মধ্যে পার্থক্য আছে কি?


53
অভিন্ন উত্তরগুলির একটি টরেন্ট কিউ করুন ...
— স্কেফম্যান

5
... এবং প্রবেশ করার জন্য অভিন্ন উত্তরগুলির মধ্যে
— প্রথমটির upvoting

9
দ্রুততম লুণ্ঠনের জন্য, পুরানো অনুসারে বাছাই করুন, উপরে ক্লিক করুন। ohowoho।
— dotjoe

1
আমি নিশ্চিত এটা আমার ছিল! এমিলের উত্তর যাইহোক ভাল।
— ভিক্টর

উত্তর:


290

++ এক্সকে প্রিনক্রেনমেন্ট বলা হয় এবং এক্স ++ কে পোস্ট-ইনক্রিমেন্ট বলা হয়।

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

62
ভাল ব্যাখ্যা, 1++।
— ওফস

67

হ্যাঁ

++ এক্স এক্স এর মান বৃদ্ধি করে এবং তারপরে এক্স
এক্স ++ প্রদান করে এক্স এর মান এবং তারপরে ইনক্রিমেন্টগুলি

উদাহরণ:

x=0;
a=++x;
b=x++;

কোড দুটি চালানোর পরে a এবং b উভয় হবে তবে x হবে 2।


10
+1 প্রচুর উদাহরণ, এটি উদাহরণ সহ একটি ব্যাখ্যা :)
— জেরেমি স্মিথ

1
হ্যাঁ, শুরুতে স্পষ্ট গদ্যের ব্যাখ্যা দেওয়ার কারণে আমিও এটিকে উত্সাহ দিয়েছিলাম। (
— হুঁ

17

এগুলি পোস্টফিক্স এবং প্রিফিক্স অপারেটর হিসাবে পরিচিত। উভয় ভেরিয়েবলে 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?
— হাইপার নিউট্রিনো

10

হ্যাঁ,

int x=5;
System.out.println(++x);

মুদ্রণ 6এবং

int x=5;
System.out.println(x++);

মুদ্রণ করবে 5।


1
@ টম, আমি কীভাবে আমার ভোট দিতে হবে তা বিবেচনা করছিলাম, সুতরাং এখানে আমার ব্যাখ্যাটি রয়েছে: এমিল এইচ এর উত্তরকে পছন্দ করার একটি ছোট কারণ হ'ল তার উদাহরণ কোডটি হল / সামান্য / আরও তথ্যপূর্ণ tive
— জোনিক

Jonik। সত্য, এর মধ্যে কীওয়ার্ডগুলি 'প্রিনক্রেনমেন্ট' এবং 'পোস্ট-ইনক্রিমেন্ট' অন্তর্ভুক্ত রয়েছে।
— টম

এই "উত্তর" আপনাকে কেবল একটি পরীক্ষার কেস আউটপুট বলে দেয় এবং আমি বিবেচনা করি যে আউটপুটগুলি উত্তর নয়। বিপরীতে, সাধারণত কিছু কোড প্রয়োগের (অপ্রত্যাশিত) ফলাফল প্রশ্নকে বাড়ে। সুতরাং আমার ডাউন ভোট।
— আলবার্তো ডি পাওলা

8

আমি এর সাম্প্রতিক ডুপ থেকে এখানে অবতরণ করেছি , এবং যদিও এই প্রশ্নের উত্তরটির চেয়ে বেশি উত্তর দেওয়া হয়েছে, আমি কোডটি ছিন্ন করতে এবং "আরও একটি উত্তর" যোগ করতে সহায়তা করতে পারি না :-)

নির্ভুল হতে (এবং সম্ভবত, কিছুটা পেডেন্টিক),

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

7

কম্পিউটার আসলে কী করে তা বিবেচনা করার সময় ...

++ এক্স: মেমরি থেকে এক্স লোড এক্স, ইনক্রিমেন্ট, ব্যবহার, মেমরিতে ফিরে store

x ++: মেমরি থেকে এক্স লোড করুন, ব্যবহার, ইনক্রিমেন্ট, মেমরিতে ফিরে যান।

বিবেচনা করুন: a = 0 x = f (a ++) y = f (++ a)

যেখানে ফাংশন চ (পি) পি + 1 প্রদান করে

এক্স হবে 1 (বা 2)

y হবে 2 (বা 1)

এবং এতেই সমস্যা রয়েছে। সংকলকটির লেখক পুনরুদ্ধার, ব্যবহারের পরে বা স্টোরেজ পরে প্যারামিটারটি পাস করেছেন?

সাধারণত, x = x + 1 ব্যবহার করুন এটি সহজ উপায়।


5

জাভাতে এক্স ++ এবং ++ এক্স এর মধ্যে পার্থক্য রয়েছে

++ এক্স একটি উপসর্গ ফর্ম: এটি ভেরিয়েবলের এক্সপ্রেশনটিকে বাড়িয়ে তোলে তারপরে এক্সপ্রেশনটিতে নতুন মানটি ব্যবহার করে।

উদাহরণস্বরূপ যদি কোডে ব্যবহৃত হয়:

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'

এক্স ++ একটি পোস্টফিক্স ফর্ম: ভেরিয়েবলের মানটি প্রথমে এক্সপ্রেশনটিতে ব্যবহৃত হয় এবং তারপরে এটি ক্রমবর্ধমান হয়।

উদাহরণস্বরূপ যদি কোডে ব্যবহৃত হয়:

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' 

আশা করি এটি পরিষ্কার হয়ে গেছে। উপরের কোডটি দৌড়ানো এবং খেলতে আপনার বুঝতে সহায়তা করা উচিত।


3

হ্যাঁ.

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);
    }
}

2

হ্যাঁ, ++ এক্স, এক্স + 1 ব্যবহার করে এক্সপ্রেশনটিতে ব্যবহৃত হবে। এক্স ++ ব্যবহার করে এক্স এক্সপ্রেশনে ব্যবহৃত হবে এবং এক্স এক্সপ্রেশনটি মূল্যায়ন করার পরে কেবল বৃদ্ধি করা হবে।

সুতরাং যদি এক্স = 9, ++ এক্স ব্যবহার করে, মান 10 ব্যবহার করা হবে, অন্যথায়, মান 9।


2

এটি যদি অন্য অনেক ভাষার মতো হয় তবে আপনি একটি সহজ চেষ্টা করতে চাইতে পারেন:

i = 0;
if (0 == i++) // if true, increment happened after equality check
if (2 == ++i) // if true, increment happened before equality check

উপরেরটি যদি এরকম না ঘটে তবে এগুলি সমতুল্য হতে পারে


2

হ্যাঁ, প্রাপ্ত মান হ'ল যথাক্রমে বর্ধনের পরে এবং তার আগে before

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

1

ঠিক আছে, আমি এখানে অবতরণ করেছি কারণ ক্লাসিক স্ট্যাকের বাস্তবায়ন পরীক্ষা করার সময় আমি সম্প্রতি একই সমস্যাটি নিয়ে এসেছি। এটি স্ট্যাকের অ্যারে ভিত্তিক প্রয়োগে ব্যবহৃত হয়, যা সংযুক্ত-তালিকার চেয়ে কিছুটা দ্রুত।

নীচের কোডটি, পুশ এবং পপ ফানক পরীক্ষা করুন।

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 দ্বারা বৃদ্ধি করা হবে, অন্যদিকে ++ x (প্রিনক্রেনমেন্ট), এক্স + 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);  
}

1

প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে আমাকেও আমার পক্ষ থেকে যুক্ত করার অনুমতি দিন।

সবার আগে ++ এর অর্থ এক দ্বারা বৃদ্ধি এবং - এর অর্থ একের অধিক হ্রাস।

এখন এক্স ++ এর অর্থ এই লাইনের পরে বৃদ্ধি x এবং ++ x এর অর্থ এই লাইনের আগে বর্ধমান 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

1
এই প্রতিক্রিয়াটি আরও ভাল কিছু ব্যাখ্যা সহ কয়েকটি শব্দ দিয়ে থাকলে।
— থম

0

আই ++ দিয়ে এটিকে পোস্টকন্ট্রিমেন্ট বলা হয় এবং মানটি তারপরে যা বৃদ্ধি পায় তা প্রসঙ্গে ব্যবহৃত হয়; ++ i হ'ল প্রথমে মান বাড়ায় এবং তারপরে প্রসঙ্গে এটি ব্যবহার করে।

আপনি যদি এটি কোনও প্রসঙ্গে ব্যবহার না করে থাকেন তবে আপনি যা ব্যবহার করেন তা বিবেচ্য নয়, তবে পোস্ট-ইনক্রিমেন্ট কনভেনশন দ্বারা ব্যবহৃত হয়।


0

একটি বিশাল পার্থক্য আছে।

যেহেতু বেশিরভাগ উত্তর ইতিমধ্যে তত্ত্বটি নির্দেশ করেছে, আমি একটি সহজ উদাহরণটি উল্লেখ করতে চাই:

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.