[ HTML ] [ Java ] [ Bahasa C ]


Rabu, April 24, 2019

Overriding Method Equal pada Java

Perhatikan contoh program berikut ini:

class Complex 

private double re, im;  

 

public Complex(double re, double im) { 

this.re = re; 

this.im = im;} 

 

// Driver class untuk test

// Complex class.

public class Main 

 

public static void main(String[] args) { 

Complex c1 = new Complex(10, 15); 

Complex c2 = new Complex(10, 15); 

if (c1 == c2) 

{System.out.println("Sama ");} 

else {System.out.println("Tidak"

+" Sama ");} 

}

 

}

Output:
Tidak Sama

Alasan untuk mencetak "Not Equal" adalah sederhana; Ketika membandingkan c1 dan c2, maka akan diperiksa apakah keduanya, c1 dan c2, mengacu pada object yang sama atau tidak. c1 dan c2 mengacu pada dua object berbeda, karenanya nilainya (c1 != c2) adalah false. Jika diciptakan referensi lainnya c3 seperti pada contoh program berikut ini (c1 == c3) maka akan memberikan nilai true.

Complex c3 = c1; /* (c3 == c1) akan bernilai true */

Jadi, bagaimana cara memeriksa nilai kesamaan dari nilai yang terdapat di dalam object? Semua class pada Java diturunkan (inherit) dari object class, baik secara langsung atapun juga tidak langsung. Class object memiliki beberapa method dasar seperti clone(), toString(), equals(), dan lain sebagainya. Sehingga, dapat dilakukan overriding method equal atau yang bernilai sama dalam sebuah class untuk diperiksa apakah dua object memiliki data yang sama atau tidak.

class Complex 

private double re, im; 

 

public Complex(double re, double im

{this.re = re; 

this.im = im;} 

 

// Overriding equals() untuk

// membandingkan dua object

// Complex.

@Override

public boolean equals(Object o) { 

 

// Jika object yang

// dibandingkan dengan dirinya

// sendiri maka akan

// memberikan nilai return

// true.

if (o == this

{return true;} 

 

// Perika jika o adalah

// instance dari Complex atau

// tidak "null

// instanceof[type]" juga

// return false.

if (!(o instanceof Complex)) 

{return false;} 

  

// Typecast o untuk Complex

// sehingga bisa dilakukan

// perbandingan anggota

// datanya.

Complex c = (Complex) o; 

  

// Membandingkan anggota data

// dan return yang sesuai.

return Double.compare(re, c.re) == 0 && Double.compare(im, c.im) == 0;} 

 

// Driver class untuk test

// Complex class.

public class Main 

{

 

public static void main(String[] args

Complex c1 = new Complex(10, 15); 

Complex c2 = new Complex(10, 15); 

if (c1.equals(c2)) 

{System.out.println("Sama ");} 

else 

{System.out.println("Tidak"

+" Sama ");} 

}

 

}

Output:
Sama

Sebagai catatan, ketika overriding equals(), juga direkomendasikan untuk melakukan overriding hashCode() method. Jika hal tersebut tidak dilakukan, object yang bernilai sama mungkin akan mendapat nilai hash yang berbeda, begitupun juga nilai hash berbasis collection, termasuk HashMap, HashSet, dan HashTable tidak akan bekerja optimal.

Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D