Program yang kita tulis hampir selalu perlu menghitung sesuatu: total belanja, rata-rata nilai, sisa bagi, hingga penggabungan teks sapaan. Java menyediakan lima operator aritmetika biner — +, -, *, /, dan % — yang bekerja pada tipe numerik seperti int, long, float, dan double. Meski terlihat sederhana, kelima operator tersebut menyimpan beberapa perilaku yang sering mengejutkan pemula: pembagian bilangan bulat memotong pecahan, operator + juga dipakai untuk menggabungkan String, dan pembagian dengan nol berakibat berbeda antara tipe bulat dan tipe pecahan. Pada Chapter ini kita akan membahas operator tersebut satu per satu dengan contoh yang dapat Anda jalankan sendiri.
Operator Aritmetika pada Bilangan Bulat #
Java memiliki lima operator aritmetika biner: + (penjumlahan), - (pengurangan), * (perkalian), / (pembagian), dan % (modulus atau sisa bagi). Sebagai operator biner, kelima operator tersebut selalu menerima dua operand. Ketika kedua operand bertipe bilangan bulat seperti int, hasilnya juga bilangan bulat — aturan numeric promotion yang sudah kita bahas pada Section Variabel dan Tipe Data. Konsekuensinya paling terasa pada operator /: 7 / 2 menghasilkan 3 karena bagian pecahan dibuang, bukan dibulatkan ke nilai terdekat.
Operator % mengembalikan sisa setelah pembagian dilakukan. Pada Java, tanda hasil % mengikuti tanda pembilang, sedangkan hasil / selalu dibulatkan ke arah nol (truncation). Contoh berikut merangkum kelima operator sekaligus memperlihatkan perilaku angka negatif.
public class AritmetikaDasar {
public static void main(String[] args) {
int permen = 7;
int anak = 2;
System.out.println("Penjumlahan : " + (permen + anak));
System.out.println("Pengurangan : " + (permen - anak));
System.out.println("Perkalian : " + (permen * anak));
int jatah = permen / anak; // pembagian bilangan bulat: pecahan dibuang
int sisa = permen % anak; // modulus: sisa setelah pembagian
System.out.println("Pembagian : " + jatah);
System.out.println("Sisa bagi : " + sisa);
System.out.println("-7 / 2 = " + (-7 / 2) + " (dibulatkan ke arah nol)");
System.out.println("-7 % 2 = " + (-7 % 2) + " (sisa mengikuti tanda pembilang)");
}
}Output yang Dihasilkan:
Penjumlahan : 9
Pengurangan : 5
Perkalian : 14
Pembagian : 3
Sisa bagi : 1
-7 / 2 = -3 (dibulatkan ke arah nol)
-7 % 2 = -1 (sisa mengikuti tanda pembilang)Mari kita telaah baris-baris kode di atas:
- Baris 3-4 (
int permen = 7;danint anak = 2;): mendeklarasikan dua variabelintyang menjadi operand pada seluruh contoh. - Baris 6-8 (
System.out.println("Penjumlahan : " + ...)): mencetak hasil+,-, dan*. Ketiga operasi ini berperilaku sama seperti aritmetika biasa. - Baris 10 (
int jatah = permen / anak;):7 / 2dievaluasi menjadi3karena kedua operand bertipeint; pecahan0.5dibuang begitu saja. - Baris 11 (
int sisa = permen % anak;): modulus7 % 2menghasilkan1, yaitu sisa tujuh permen setelah dibagi rata ke dua anak. - Baris 16-17:
-7 / 2menghasilkan-3(dibulatkan ke arah nol, bukan-4) dan-7 % 2menghasilkan-1yang tandanya mengikuti tanda pembilang.
Pembagian Bulat vs Pembagian Pecahan #
Bila salah satu operand bertipe pecahan (double atau float), operand bulat dipromosikan lebih dahulu sehingga pembagian berlangsung sebagai operasi pecahan. Itulah sebabnya 7.0 / 2, 7 / 2.0, dan (double) 7 / 2 semuanya menghasilkan 3.5. Operator cast (double) hanya perlu dikenakan pada satu operand — cukup satu sisi menjadi pecahan agar seluruh ekspresi dihitung sebagai pecahan. Untuk menampilkan hasil pecahan, gunakan printf dengan format seperti %.2f agar keluaran rapi dua angka desimal.
public class PembagianTipeCampuran {
public static void main(String[] args) {
int apel = 7;
int keranjang = 2;
System.out.println("7 / 2 = " + (7 / 2));
System.out.println("7.0 / 2 = " + (7.0 / 2));
System.out.println("7 / 2.0 = " + (7 / 2.0));
System.out.println("(double) 7 / 2 = " + ((double) 7 / 2));
double rataApel = (double) apel / keranjang;
System.out.printf("Rata-rata per keranjang: %.2f%n", rataApel);
System.out.println("Harga: " + 3 + 5);
System.out.println("Harga: " + (3 + 5));
}
}Output yang Dihasilkan:
7 / 2 = 3
7.0 / 2 = 3.5
7 / 2.0 = 3.5
(double) 7 / 2 = 3.5
Rata-rata per keranjang: 3.50
Harga: 35
Harga: 8Perhatikan empat varian pembagian pada baris 6-9: hanya 7 / 2 yang menghasilkan 3, tiga varian lainnya menghasilkan 3.5. Baris 11-12 memakai printf dengan format %.2f sehingga hasil 3.5 tampil sebagai 3.50. Dua baris terakhir menunjukkan jebakan lain dari operator + yang akan kita bahas sekarang.
Operator + untuk Menggabungkan String #
Operator + memikul tugas ganda pada Java. Bila salah satu operand bertipe String, operand lainnya dikonversi menjadi teks lalu keduanya digabungkan — inilah string concatenation. Evaluasi berlangsung dari kiri ke kanan, sehingga "Harga: " + 3 + 5 menghasilkan "Harga: 35": angka 3 digabungkan lebih dulu sebagai teks, kemudian angka 5 menyusul. Tanda kurung memaksa penjumlahan numerik diperhitungkan lebih awal, seperti pada "Harga: " + (3 + 5) yang menghasilkan "Harga: 8".
Aturan sederhana ini menjelaskan banyak kejutan output pada program pemula. Ketika Anda melihat angka yang seharusnya dijumlahkan tetapi tampil berdempet sebagai teks, periksa urutan operand dan tambahkan tanda kurung pada bagian yang harus dihitung sebagai bilangan.
Pembagian dengan Nol #
Pembagian bilangan bulat dengan nol membuat JVM melempar ArithmeticException saat program berjalan. Compiler javac tidak menolak kode tersebut saat kompilasi karena nilai penyebut baru diketahui pada saat eksekusi. Untuk tipe pecahan, Java mengikuti standar IEEE 754: 7.0 / 0 menghasilkan Infinity dan 0.0 / 0 menghasilkan NaN (Not a Number) tanpa melempar exception apa pun.
public class PembagianDenganNol {
public static void main(String[] args) {
int pembilang = 7;
int penyebut = 0;
try {
System.out.println(pembilang / penyebut);
} catch (ArithmeticException e) {
System.out.println("Gagal: ArithmeticException - " + e.getMessage());
}
System.out.println("7.0 / 0 = " + (7.0 / 0));
System.out.println("0.0 / 0 = " + (0.0 / 0));
}
}Output yang Dihasilkan:
Gagal: ArithmeticException - / by zero
7.0 / 0 = Infinity
0.0 / 0 = NaNMari kita telaah baris-baris kode di atas:
- Baris 3-4 (
int pembilang = 7;danint penyebut = 0;): menyiapkan pembagian bulat dengan penyebut nol. - Baris 6-10 (
try { ... } catch ...): JVM melemparArithmeticExceptionketika eksekusi mencapai baris 7. Blokcatchmenangkap exception tersebut, methodgetMessage()mengembalikan teks/ by zero, dan program tetap berlanjut — tanpatry-catch, program akan berhenti di titik itu. - Baris 12-13: pembagian pecahan dengan nol tidak melempar exception, melainkan menghasilkan nilai spesial
InfinitydanNaNsesuai standar IEEE 754.
Dengan lima operator aritmetika di tangan, pertanyaan berikutnya adalah bagaimana menyimpan hasil perhitungan ke dalam variabel secara ringkas. Chapter berikutnya membahas assignment operators — operator = berserta bentuk gabungannya seperti += dan %= yang memadukan perhitungan dan penugasan dalam satu statement.
Referensi #
- Java Language Specification — Bab 15 Expressions
- Class ArithmeticException — Java SE 25 API
- Oracle Dev.java — Learn Java
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
AritmetikaDasar.java
Unduh berkaspublic class AritmetikaDasar {
public static void main(String[] args) {
int permen = 7;
int anak = 2;
System.out.println("Penjumlahan : " + (permen + anak));
System.out.println("Pengurangan : " + (permen - anak));
System.out.println("Perkalian : " + (permen * anak));
int jatah = permen / anak; // pembagian bilangan bulat: pecahan dibuang
int sisa = permen % anak; // modulus: sisa setelah pembagian
System.out.println("Pembagian : " + jatah);
System.out.println("Sisa bagi : " + sisa);
System.out.println("-7 / 2 = " + (-7 / 2) + " (dibulatkan ke arah nol)");
System.out.println("-7 % 2 = " + (-7 % 2) + " (sisa mengikuti tanda pembilang)");
}
}
PembagianDenganNol.java
Unduh berkaspublic class PembagianDenganNol {
public static void main(String[] args) {
int pembilang = 7;
int penyebut = 0;
try {
System.out.println(pembilang / penyebut);
} catch (ArithmeticException e) {
System.out.println("Gagal: ArithmeticException - " + e.getMessage());
}
System.out.println("7.0 / 0 = " + (7.0 / 0));
System.out.println("0.0 / 0 = " + (0.0 / 0));
}
}
PembagianTipeCampuran.java
Unduh berkaspublic class PembagianTipeCampuran {
public static void main(String[] args) {
int apel = 7;
int keranjang = 2;
System.out.println("7 / 2 = " + (7 / 2));
System.out.println("7.0 / 2 = " + (7.0 / 2));
System.out.println("7 / 2.0 = " + (7 / 2.0));
System.out.println("(double) 7 / 2 = " + ((double) 7 / 2));
double rataApel = (double) apel / keranjang;
System.out.printf("Rata-rata per keranjang: %.2f%n", rataApel);
System.out.println("Harga: " + 3 + 5);
System.out.println("Harga: " + (3 + 5));
}
}