ถามตอบปัญหาจาวา

ถาม จะถามอาจารย์ว่า a++ กับ ++a หรือ a-- กับ --a แตกต่างกันหรือเปล่าคะ
ตอบ แตกต่างกันครับ กรณีของ a++ จะนำค่าของตัวแปร a ไปใช้เป็นผลลัพธ์ของนิพจน์ก่อนแล้วจึงเพิ่มค่าของ a ขึ้นอีก 1
ส่วน ++a จะทำการเพิ่มค่าของ a ขึ้นไป 1 ก่อนแล้วจึงนำค่าที่ได้ไปใช้เป็นผลลัพธ์ของนิพจน์ แต่หลังจากดำเนินการแล้ว ทั้ง 2 กรณีนี้ค่าของ a จะเพิ่มขึ้นไป 1 ถ้านำตัวดำเนินการ 2 ตัวนี้ไปเขียนในข้อความสั่งง่ายๆ ที่ไม่มีตัวดำเนินการอื่นใดอยู่เลย หรือไม่มีการนำไปใช้เป็นพารามิเตอร์ของเมธอดใดเลย จะได้ผลเท่ากัน เพราะต่างก็ทำให้ a เพิ่มค่าอีก 1 แต่ถ้านำไปใช้ในนิพจน์ที่ซับซ้อน หรือใช้เป็นพารามิเตอร์ มันจะให้ผลที่แตกต่างกันครับ
ลองดูตัวอย่างดีกว่านะครับ จะช่วยให้เข้าใจง่ายขึ้น
ตัวอย่าง 1
int a=10;
a++;
System.out.println(a);

ตัวอย่าง 2
int a=10;
++ a;
System.out.println(a);
ตัวอย่าง 3
int a=10;
System.out.println(a++);

ตัวอย่าง 4
int a=10;
System.out.println(++a);

ผลการทำงาน ตัวอย่าง 1 และ 2 ให้ผลลัพธ์เท่ากันทั้งคู่ เพราะว่าต่างก็นำค่าของ a ไปพิมพ์ในอีกบรรทัดหนึ่ง เป็นการนำค่าของตัวแปร a ไปพิมพ์ ไม่ใช่นำค่าของนิพจน์ a++ หรือ ++a ไปพิมพ์ ( ค่าของนิพจน์จะได้ต่างกัน แต่หลังจากผ่านไปแล้วผลของมันทำให้ตัวแปร a เพิ่มขึ้น 1 ทั้ง 2 กรณี) ตัวอย่าง 1 และ 2 พิมพ์ค่า 11 ออกมาทั้ง 2 ตัวอย่าง
ตัวอย่างที่ 3 พิมพ์ค่า 10 ออกมา เพราะหยิบเอาค่าของ a ออกมาส่งไปเป็นพารามิเตอร์ให้เมธอด println() ก่อนที่จะเพิ่มค่าให้กับตัวแปร a
ส่วนตัวอย่างที่ 4 จะพิมพ์ค่าเป็น 11 เนื่องจากเพิ่มค่าให้กับตัวแปร a จาก 10 เป็น 11 ก่อน แล้วส่งค่าที่ได้ไปเป็นพารามิเตอร์ให้เมธอด println() แล้วจึงเก็บค่า 11 กลับลงไปในตัวแปร a
ทั้ง 4 ตัวอย่างนี้ ท้ายที่สุดแล้วตัวแปร a จะเป็น 11 เหมือนกันหมด ข้อแตกต่างจึงอยู่ที่การนำค่าของนิพจน์ไปใช้ หรือจะนำค่าของตัวแปร a หลังดำเนินการแล้วไปใช้
สำหรับ a-- และ --a ก็อาศัยหลักการเดียวกัน ต่างกันที่จะบวกหรือลบด้วย 1 เท่านั้น