Operator Compound Java

1. Ikhtisar

Dalam tutorial ini, kita akan melihat operator gabungan Java, tipenya dan bagaimana Java mengevaluasinya.

Kami juga akan menjelaskan cara kerja transmisi implisit.

2. Operator Penugasan Majemuk

Operator penugasan adalah operator biner yang memberikan hasil dari sisi kanan ke variabel di sisi kiri. Yang paling sederhana adalah operator penugasan “=” :

int x = 5;

Pernyataan ini mendeklarasikan variabel baru x , memberikan x nilai 5 dan mengembalikan 5 .

Operator Penugasan Gabungan adalah cara yang lebih singkat untuk menerapkan operasi aritmatika atau bitwise dan untuk menetapkan nilai operasi ke variabel di sisi kiri.

Misalnya, dua pernyataan perkalian berikut ini setara, artinya a dan b akan memiliki nilai yang sama:

int a = 3, b = 3, c = -2; a = a * c; // Simple assignment operator b *= c; // Compound assignment operator

Penting untuk dicatat bahwa variabel di sebelah kiri operator penugasan majemuk harus sudah dideklarasikan. Dengan kata lain, operator gabungan tidak dapat digunakan untuk mendeklarasikan variabel baru.

Seperti operator penetapan "=", operator gabungan mengembalikan hasil ekspresi yang ditetapkan:

long x = 1; long y = (x+=2);

Baik x dan y akan memiliki nilai 3 .

Tugas (x + = 2) melakukan dua hal: pertama, menambahkan 2 ke nilai variabel x , yang menjadi 3; kedua, ini mengembalikan nilai tugas, yang juga 3 .

3. Jenis Operator Penugasan Majemuk

Java mendukung 11 operator penugasan gabungan. Kita dapat mengelompokkan ini menjadi operator aritmatika dan bitwise.

Mari kita telusuri operator aritmatika dan operasi yang mereka lakukan:

  • Penambahan: + =
  • Pengurangan: - =
  • Perkalian: * =
  • Divisi: / =
  • Modulus: % =

Kemudian, kami juga memiliki operator bitwise:

  • DAN, biner: & =
  • Eksklusif OR, biner: ^ =
  • Termasuk OR, biner: | =
  • Shift Kiri, biner: << =
  • Pergeseran Kanan, biner: >> =
  • Geser ke kanan mengisi nol: >>> =

Mari kita lihat beberapa contoh operasi ini:

// Simple assignment int x = 5; // x is 5 // Incrementation x += 5; // x is 10 // Decrementation x -= 2; // x is 8 // Multiplication x *= 2; // x is 16 // Modulus x %= 3; // x is 1 // Binary AND x &= 4; // x is 0 // Binary exclusive OR x ^= 4; // x is 4 // Binary inclusive OR x |= 8; // x is 12

Seperti yang bisa kita lihat di sini, sintaks untuk menggunakan operator ini konsisten.

4. Evaluasi Operasi Penugasan Majemuk

Ada dua cara Java mengevaluasi operasi gabungan.

Pertama, ketika operan kiri bukan sebuah array, maka Java akan, dengan urutan:

  1. Pastikan operan adalah variabel yang dideklarasikan
  2. Simpan nilai operan kiri
  3. Evaluasi operan kanan
  4. Lakukan operasi biner seperti yang ditunjukkan oleh operator gabungan
  5. Ubah hasil operasi biner ke jenis variabel sebelah kiri (casting implisit)
  6. Tetapkan hasil konversi ke variabel sebelah kiri

Selanjutnya, jika operan kiri adalah sebuah larik, langkah-langkah yang harus diikuti akan sedikit berbeda:

  1. Verifikasi ekspresi array di sisi kiri dan lempar NullPointerException atau ArrayIndexOutOfBoundsException jika salah
  2. Simpan elemen array dalam indeks
  3. Evaluasi operan kanan
  4. Periksa apakah komponen array yang dipilih adalah tipe primitif atau tipe referensi dan kemudian lanjutkan dengan langkah yang sama seperti daftar pertama, seolah-olah operan kiri adalah variabel.

Jika salah satu langkah evaluasi gagal, Java tidak terus melakukan langkah-langkah berikut.

Mari berikan beberapa contoh yang terkait dengan evaluasi operasi ini ke elemen array:

int[] numbers = null; // Trying Incrementation numbers[2] += 5;

Seperti yang kita harapkan, ini akan memunculkan NullPointerException .

Namun, jika kita memberikan nilai awal ke array:

int[] numbers = {0, 1}; // Trying Incrementation numbers[2] += 5;

Kami akan menyingkirkan NullPointerException, tetapi kami masih mendapatkan ArrayIndexOutOfBoundsException , karena indeks yang digunakan salah.

Jika kami memperbaikinya, operasi akan berhasil diselesaikan:

int[] numbers = {0, 1}; // Incrementation numbers[1] += 5; // x is now 6

Terakhir, variabel x akan menjadi 6 di akhir tugas.

5. Casting Implisit

Salah satu alasan operator gabungan berguna adalah karena mereka tidak hanya menyediakan cara yang lebih singkat untuk operasi, tetapi juga variabel secara implisit.

Secara formal, ekspresi tugas majemuk dalam bentuk:

E1 op = E2

setara dengan:

E1 - (T) (E1 op E2)

dimana T adalah tipe E1 .

Let’s consider the following example:

long number = 10; int i = number; i = i * number; // Does not compile

Let’s review why the last line won’t compile.

Java automatically promotes smaller data types to larger data ones, when they are together in an operation, but will throw an error when trying to convert from larger to smaller types.

So, first, i will be promoted to long and then the multiplication will give the result 10L. The long result would be assigned to i, which is an int, and this will throw an error.

This could be fixed with an explicit cast:

i = (int) i * number;

Java compound assignment operators are perfect in this case because they do an implicit casting:

i *= number;

Pernyataan ini berfungsi dengan baik, mentransmisikan hasil perkalian ke int dan menetapkan nilai ke variabel sisi kiri, i .

6. Kesimpulan

Pada artikel ini, kami melihat operator gabungan di Java, memberikan beberapa contoh dan tipe yang berbeda. Kami menjelaskan bagaimana Java mengevaluasi operasi ini.

Terakhir, kami juga meninjau casting implisit, salah satu alasan operator singkatan ini berguna.

Seperti biasa, semua cuplikan kode yang disebutkan dalam artikel ini dapat ditemukan di repositori GitHub kami.