Sejauh ini kita memakai operator biner yang selalu menerima dua operand. Java juga mengenal operator unary — operator yang hanya butuh satu operand — dan Anda sudah memakainya sejak lama: tanda minus pada -10 adalah operator unary negasi. Kelompok ini beranggotakan + (identitas), - (negasi), ++ (increment), -- (decrement), dan ~ (komplemen bit); operator ! untuk boolean kita bahas pada Chapter Logical Operators. Bintang utama Chapter ini adalah pasangan ++ dan -- yang memiliki dua bentuk — prefix dan postfix — dengan perbedaan perilaku yang menjadi salah satu pertanyaan wawancara kerja paling klasik.
Operator Plus Minus dan Komplemen #
Operator unary - membalik tanda nilai numeriknya, sehingga -suhuRuang pada variabel bernilai 24 menghasilkan -24 dan dua kali negasi saling meniadakan: -titikBeku pada -10 menghasilkan 10. Operator unary + hampir tidak pernah dibutuhkan karena nilainya identik dengan operand asal; kegunaannya sekadar menyatakan niat secara eksplisit, misalnya +suhu untuk menandakan “nilai positif”. Operator ~ kita kenal pada Chapter Bitwise Operators sebagai pembalik seluruh bit — rumus praktisnya ~n sama dengan -n - 1.
public class OperatorUnary {
public static void main(String[] args) {
int suhuRuang = 24;
int titikBeku = -10;
System.out.println("+suhuRuang = " + (+suhuRuang));
System.out.println("-suhuRuang = " + (-suhuRuang));
System.out.println("-titikBeku = " + (-titikBeku));
System.out.println("~suhuRuang = " + (~suhuRuang) + " (komplemen bit)");
}
}Output yang Dihasilkan:
+suhuRuang = 24
-suhuRuang = -24
-titikBeku = 10
~suhuRuang = -25 (komplemen bit)Baris 6-7 memperlihatkan identitas + dan negasi - bekerja pada nilai positif. Baris 8 membuktikan negasi ganda: -(-10) kembali menjadi 10. Baris 9 menghasilkan -25 dari ~24 sesuai rumus -24 - 1 — bukan kebetulan, melainkan akibat langsung representasi two’s complement.
Increment dan Decrement #
Operator ++ menaikkan variabel sebesar satu dan operator -- menurunkannya sebesar satu. Keduanya hadir dalam dua bentuk yang letak penulisannya berbeda: prefix (++a) menaikkan nilai lebih dahulu lalu nilai baru itulah yang dipakai ekspresi, sedangkan postfix (a++) menyerahkan nilai lama lebih dahulu kepada ekspresi, baru variabel dinaikkan. Ketika a++ atau ++a berdiri sebagai statement mandiri, keduanya identik — perbedaannya baru terasa ketika hasilnya dipakai dalam ekspresi yang lebih besar.
public class NaikTurun {
public static void main(String[] args) {
int a = 5;
System.out.println("a = " + a);
System.out.println("a++ = " + (a++)); // nilai lama dipakai dulu, lalu a naik
System.out.println("a = " + a);
System.out.println("++a = " + (++a)); // a naik dulu, lalu nilai barunya dipakai
int b = 10;
System.out.println("b-- = " + (b--));
System.out.println("b = " + b);
System.out.println("--b = " + (--b));
}
}Output yang Dihasilkan:
a = 5
a++ = 5
a = 6
++a = 7
b-- = 10
b = 9
--b = 8Mari kita telaah baris-baris kode di atas:
- Baris 5 (
System.out.println("a++ = " + (a++));): variabelabernilai5; postfix menyerahkan nilai lama5kepadaprintln, dan hanya setelah ituamenjadi6— terbukti pada baris 6. - Baris 7 (
System.out.println("++a = " + (++a));): prefix menaikkanadari6menjadi7lebih dahulu, lalu nilai baru7itulah yang dicetak. - Baris 10-12: pola yang sama untuk decrement —
b--mencetak10sementarabdiam-diam menjadi9, lalu--bmenurunkanbmenjadi8sebelum dicetak.
Increment di Dalam Ekspresi Majemuk #
Perbedaan prefix dan postfix paling terlihat ketika keduanya berada dalam satu ekspresi. Ekspresi legendaris x++ + ++x dievaluasi dari kiri ke kanan: x++ menyerahkan nilai 5 (dengan x naik menjadi 6), kemudian ++x menaikkan x menjadi 7 dan menyerahkan 7, sehingga jumlahnya 12 dan x berakhir di 7. Mari kita buktikan bersama JVM, bukan sekadar menghafal.
public class EkspresiGabunganIncrement {
public static void main(String[] args) {
int x = 5;
int hasil = x++ + ++x;
System.out.println("x = " + x);
System.out.println("hasil = " + hasil);
int y = 5;
int hasil2 = y++ + y++;
System.out.println("y = " + y);
System.out.println("hasil2 = " + hasil2);
}
}Output yang Dihasilkan:
x = 7
hasil = 12
y = 7
hasil2 = 11Baris 4 memperlihatkan hasil bernilai 12 dengan x berakhir di 7 — tepat sesuai urutan cerita di atas. Baris 9 memakai dua postfix berurutan: y++ pertama menyerahkan 5 (y menjadi 6), y++ kedua menyerahkan 6 (y menjadi 7), sehingga hasil2 bernilai 11.
Operator unary menuntas daftar operator yang bekerja pada operand tunggal. Bab berikutnya menyajikan operator paling ringkas di Java untuk pengambilan keputusan: ternary operator kondisi ? a : b yang memadukan fungsi if-else ke dalam satu ekspresi.
Referensi #
- Java Language Specification — Bab 15 Expressions
- Oracle Dev.java — Learn Java
- Oracle Java SE 25 Documentation
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
EkspresiGabunganIncrement.java
Unduh berkaspublic class EkspresiGabunganIncrement {
public static void main(String[] args) {
int x = 5;
int hasil = x++ + ++x;
System.out.println("x = " + x);
System.out.println("hasil = " + hasil);
int y = 5;
int hasil2 = y++ + y++;
System.out.println("y = " + y);
System.out.println("hasil2 = " + hasil2);
}
}
NaikTurun.java
Unduh berkaspublic class NaikTurun {
public static void main(String[] args) {
int a = 5;
System.out.println("a = " + a);
System.out.println("a++ = " + (a++)); // nilai lama dipakai dulu, lalu a naik
System.out.println("a = " + a);
System.out.println("++a = " + (++a)); // a naik dulu, lalu nilai barunya dipakai
int b = 10;
System.out.println("b-- = " + (b--));
System.out.println("b = " + b);
System.out.println("--b = " + (--b));
}
}
OperatorUnary.java
Unduh berkaspublic class OperatorUnary {
public static void main(String[] args) {
int suhuRuang = 24;
int titikBeku = -10;
System.out.println("+suhuRuang = " + (+suhuRuang));
System.out.println("-suhuRuang = " + (-suhuRuang));
System.out.println("-titikBeku = " + (-titikBeku));
System.out.println("~suhuRuang = " + (~suhuRuang) + " (komplemen bit)");
}
}