Rabu, 10 Oktober 2012

Bekerja dengan Java Class Library (part4)

Kita lanjut Pembahasan Selanjutnya dari materi yang lalu...


9.5.3 Convert Tipe Primitive ke Object Dan Sebaliknya
Satu hal yang tidak dapat Anda lakukan pada beberapa keadaan yaitu konversi
dari sebuah obyek ke sebuah tipe data primitif, atau sebaliknya. Tipe-tipe data
primitif dan obyek adalah sesuatu yang sangat berbeda dalam Java, dan Anda
tidak bisa secara langsung konversi diantara keduanya.
Sebagai sebuah alternatif, package java.lang yang terdiri atas class-class yang
berhubungan untuk setiap tipe data primitif yaitu : Float, Boolean, Byte, dan
sebagainya. Kebanyakan dari class-class ini memiliki nama yang sama seperti tipe
datanya, kecuali jika nama classnya diawali dengan huruf besar (Short -> sort,
Double -> double dan sebagainya). Selain itu terdapat dua class yang memiliki nama
berbeda dari tipe data primitifnya yaitu: Character digunakan untuk variabel char dan
Integer untuk variabel int. (Disebut dengan Wrapper Classes)
Java merepresentasikan tipe data primi ti f dan versi classnya dengan sangat berbeda.
Sebuah program tidak akan berhasil tercompile jika Anda menggunakan hanya satu ketika
yang lain juga diperlukan.
Menggunakan class-class yang berhubungan untuk setiap tipe primitif, anda dapat
membuat sebuah obyek yang memiliki nilai yang sama.
Contoh :
//Pernyataan berikut membentuk sebuah instance bertipe Integer
// class dengan nilai integer 7801 (primitif -> Object)
Integer dataCount = new Integer(7801);
//Pernyataan berikut meng-konversi sebuah obyek Integer ke
//tipe data primitif int nya. Hasilnya adalah sebuah int
//dengan nilai 7801
int newCount = dataCount.intValue();
// Anda perlu suatu translasi biasa pada program
// yang mengkonversi sebuah String ke sebuah tipe numeric,
//seperti suatu int
// Obyek->primitif
String pennsylvania = "65000";
int penn = Integer.parseInt(pennsylvania);
 PERHATIAN: class Void tidak mewakili apapun dalam Java, jadi class ini tidak akan
digunakan ketika melakukan konversi antara nilai primitif dan obyek. Kata void
digunakan dalam definisi method untuk mengindikasikan bahwa method tidak memiliki
sebuah nilai yang dihasilkan.
9.5.3 Membandingkan dua Obyek
Dalam diskusi kita sebelumnya, kita mempelajari tentang operator untuk membandingkan
nilai — sama dengan, tidak sama dengan, lebih kecil daripada, dan sebagainya. Operator ini
hanya bekerja pada tipe primitif, bukan pada obyek. Jika Anda berusaha untuk
menggunakan nilai selain tipe data primitif sebagai operand, compiler Java akan
menghasilkan error.
Salah satu contoh untuk aturan ini adalah operator untuk persamaan : == (sama dengan)
dan != (tidak samadengan), ketika operator ini dimasukkan ke sebuah obyek, operator ini
tidak akan melakukan apa yang sebenarnya diinginkan. Penggunaan operator ini akan
memeriksa kesamaan antara satu obyek ke obyek lain, bukan nilainya.
Untuk membandingkan instance dari sebuah, Anda harus mengimplementasikan method
khusus dalam class anda dan memanggil method tersebut. Sebuah contoh yang baik untuk
ini adalah class String.
Sangat mungkin memiliki dua object String yang memiliki nilai yang sama. Namun, jika
Anda menggunakan operator == untuk membandingkan obyek ini, kedua obyek tersebut
akan


menghasilkan hasil yang tidak sama. Walaupun isinya ternyata sama akan tetapi pada
kenyataannya mereka bukan merupakan obyek yang sama.
Untuk melihat jika dua object String memiliki nilai yang sama, sebuah method dari class
yaitu equals() digunakan. Method ini akan memeriksa setiap karakter dalam string dan
mengembalikan nilai true jika dua obyek string memiliki nilai yang sama.
Kode berikut mengilustrasikan hal tersebut,
class EqualsTest {
public static void main(String[] arguments) {
String str1, str2;
str1 = "Free the bound periodicals.";
str2 = str1;
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
str2 = new String(str1);
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
System.out.println("Same value? " + str1.equals(str2));
}
}
Output program ini adalah sebagai berikut ,
OUTPUT:
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? true
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? false
Same value? True
Sekarang mari mendiskusikan tentang dua baris kode dari program sebagai berikut.
String str1, str2;
str1 = "Free the bound periodicals.";



Bagian pertama dari program mendeklarasikan dua variabel (str1 dan str2), memberikan
kalimat "Free the bound periodicals." untuk str1, dan kemudian memberi nilai tersebut untuk
str2. Seperti yang Anda pelajari sebelumnya, str1 dan str2 sekarang menunjuk ke alamat
obyek yang sama, dan uji kesamaan membuktikan hal tersebut.
str2 = new String(str1);
Pada bagian yang kedua dari program ini, anda membuat obyek String baru dengan nilai
yang sama dari str1 dan memberikkanya ke str2. Sekarang Anda memiliki dua obyek string
yang berbeda yaitu str1 dan str2, keduanya memilki nilai yang sama. Ketika dilakukan
pengujian untuk melihat jika mereka obyek yang sama dengan menggunakan operator ==,
akan dihasilkan nilai: false — kedua obyek bukan obyek yang sama dalam memory. ketika
dilakukan pengujian menggunakan method equals() maka akan dihasilkan : true – kedua
obyek tersebut memiliki nilai yang sama.


Catatan: Mengapa kita tidak dapat hanya menggunakan literal yang lain ketika ingin
mengubah str2, selain menggunakan new? String literals sudah dioptimasi dalam Java; jika
Anda membuat sebuah string menggunakan literal dan kemudian menggunakan literal
yang lain dengan character yang sama, Java cukup memberikan Anda obyek String yang
pertama kembali. Jadi kedua String tadi adalah obyek yang sama; Anda harus
menghidari langkah anda untuk membuat dua obyek terpisah.




9.5.5 Menentukan Class dari sebuah Object
Jika kita ingin mengetahui class dari sebuah obyek dapat dilakukan dengan cara :
1. Method getClass() mengembalikan sebuah obyek Class (dimana Class itu
sendiri merupakan sebuah class) yang memilki sebuah method getName(). Selanjutnya
getName() akan mengembalikan sebuah string yang mewakili nama class.
Sebagai contoh,
String name = key.getClass().getName();
2. operator InstanceOf
instanceOf memiliki dua operand: obyek pada sebelah kiri dan nama class pada
sebelah kanan. Pernyataan inimengembalikan nilai true atau false tergantung pada
benar/salah obyek adalah sebuah instance dari penamaan class atau beberapa
subclass milik class tersebut.
Sebagai contoh,
boolean ex1 = "Texas" instanceof String; // true
Object pt = new Point(10, 10);
boolean ex2 = pt instanceof String; // false





Tidak ada komentar:

Posting Komentar