Passing Array Pada Method Java

Bila sebelumnya anda sudah mengetahui passed-by-value pada method untuk tipe data primitif, lalu bagaimana halnya dengan array?

Ketika anda melakukan passing array terhadap method, maka referensi dari array tersebut yang dilewatkan pada method tersebut.

Berikut ini adalah contoh kode dengan method tampilkanElemenArray untuk menampilkan elemen array dengan tipe int.




Contoh:

public class PassingArray{
   
    public static void main (String args []){
       
        int angka [] = {5,6,7,8,9,10};
        tampilkanElemenArray(angka);
       
    }
   
    public static void tampilkanElemenArray(int array []){
        System.out.print("Elemen array adalah: ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

}


Output:
Elemen array adalah: 5 6 7 8 9 10

Pada pernyataan di bawah ini adalah contoh memanggil method tampilkanElemenArray untuk menampilkan 5, 6, 7, 8, 9 dan 10.

Contoh:

public class PassingArray{
   
    public static void main (String args []){
       
        tampilkanElemenArray(new int [] {5, 6, 7, 8, 9,10});
    }
   
    public static void tampilkanElemenArray(int array []){
        System.out.print("Elemen array adalah: ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

}


Output:
Elemen array adalah: 5 6 7 8 9 10

Pernyataan tampilkanElemenArray(new int [] {5, 6, 7, 8, 9,10});, pada kode di atas membuat array dengan syntax:

new elementType[]{value0, value1, ..., valuek};

Pada syntax tersebut dinyatakan bahwa array tidak memiliki variabel referensi, sehingga array seperti ini disebut juga dengan anonymous array.

Perbedaan Passing Nilai Variabel Primitif Dengan Passing Array Pada Method

Ada beberapa perbedaan yang harus diketahui antara passing nilai variabel primitif dengan passing array pada method, diantaranya adalah:


  • Untuk argumen dengan tipe data primitif, maka nilai yang dimiliki argumen akan dilewatkan (passed)
  • Untuk argumen dengan tipe array, nilai dari argumen adalah referensi dari array tersebut; nilai dari referensi itu dilewatkan (passed) pada method. Maka array yang berada dalam method adalah sama dengan array yang berada di luar method, sehingga ketika array yang di dalam method berubah, maka array yang berada diluar method juga akan berubah.
Contoh 1:

public class PassingArray{
   
    public static void main (String args []){
       
        int a = 10;
        int b [] = new int [5];
        tampilkan(a, b);
       
        System.out.println("nilai a adalah: " + a);
        System.out.println("nilai elemen array b pada index 0 adalah "
                            + b[0]);
       
    }
   
    public static void tampilkan(int angka, int arr []){
       
        angka = 5000;
        array [0] = 5000;
       
    }

}


Output:
nilai a adalah: 10
nilai elemen array b pada index 0 adalah 5000


Yang menjadi pertanyaan adalah kenapa nilai x adalah tetap 10, sementara nilai elemen array b[0] berubah menjadi 5000?

Hal ini karena b dan arr, walaupun keduanya adalah variabel yang saling bebas, namun mereka bereferensi pada array yang sama. Ketika method tampilkan(a, b); dipanggil, maka nilai dari a dan b dilewatkan
pada angka dan arr. Dikarenakan b mengandung nilai referensi terhadap array, maka arr juga sekarang mengandung nilai referensi yang sama pada array yang sama.


Perhatikan juga kode di bawah ini.

Contoh 2:

public class PassingArray{
   
    public static void main (String args []){
       
        int x [] = {11, 12};
       
        tukarElemen(x[0], x[1]);
        System.out.println(x[0] + " " + x[1]);
    }
    

    //Metod untuk menukar elemen
    public static void tukarElemen(int elemen1, int elemen2) {
        int temp = elemen1;
        elemen1 = elemen2;
        elemen2 = temp;
    }

}


Output:
11 12

Setelah diekesekusi, mengapa elemen dari array x tidak berubah menjadi 12 11?

Hal ini karena parameter dalam method tukarElemen adalah tipe primitif, sehingga nilai dari x[0] dan x[1] di lewatkan pada elemen1 dan elemen2 di dalam method ketika memanggil dengan pernyataan tukarElemen(x[0], x[1]);

Lokasi memori untuk elemen1 dan juga elemen2 adalah saling bebas baik itu untuk x[0] ataupun untuk x[1], sehingga konten dari array tidak terpengaruh dengan memanggil method ini.

Perhatikan kode di bawah ini.

Contoh 3:

public class PassingArray{
   
    public static void main (String args []){
       
        int x [] = {11, 12};
       
        tukarElemen(x);
        System.out.println(x[0] + " " + x[1]);
    }
   
    public static void tukarElemen(int[] array) {
        int temp = array[0];
        array[0] = array[1];
        array[1] = temp;
    }

}


Output:
12 11

Kode di atas berhasil menukar elemen array, mengapa? 

Karena parameter di dalam method tukarElemen pada kode di atas adalah array. Ketika dieksekusi, maka variabel referensi dari array dilewatkan pada method. 

Selanjutnya yang terjadi adalah variabel x yang berada diluar method dan array yang berada di dalam method keduanya merupakan referensi terhadap array dalam lokasi memori yang sama. Oleh karena itu, melakukan pertukaran array[0] dengan array[1] di dalam method adalah sama halnya dengan melakukan pertukaran x[0] dan x[1] di luar method.

No comments

Bahasa Java. Powered by Blogger.