Saat membuat program, terkadang kita butuh mengakses sebuah field yang namanya sama dengan parameter pada method. Hal ini tidak bisa dilakukan begitu saja, karena akan menyebabkan terjadinya variable shadowing. Misalkan, kita membuat sebuah program perkenalan diri kepada seseorang yang bernama Budi.

class Person {
    String name = "Budi";

    void sayHello(String name) {
        System.out.println("Halo " + name + ", nama saya " + name);
    }
}

class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.sayHello("Dede");
    }
}
Output Program
Gambar output program

Dari output program di atas, terlihat bahwa variable name pertama pada baris perintah System.out.println(“Halo " + name + “, nama saya " + name) merujuk ke parameter name pada method sayHello(String name),

Ilustrasi 1
Gambar ilustrasi

Yang mana seharusnya variable name ini merujuk pada field String name = “Budi”,

Ilustrasi 2
Gambar ilustrasi

Hal inilah yang disebut dengan variable shadowing. Untuk mengatasi masalah ini, kita bisa menggunakan kata kunci “this”.

class Person {
    String name = "Budi";

    void sayHello(String name) {
        System.out.println("Halo " + this.name + ", nama saya " + name);
    }
}

class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.sayHello("Dede");
    }
}
Ilustrasi 3
Gambar ilustrasi

Bila dijalankan maka output dari progam di atas adalah sebagai berikut:

Output program dengan kata kunci this
Gambar output program dengan kata kunci this

Kesimpulan

Untuk mengatasi masalah variable shadowing ini, sebenarnya bisa saja kita membuat variable dengan nama yang berbeda, namun hal ini bukan best practice.

Sekian, semoga bermanfaat.

CMIIW.