জাভাতে 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.