Jumat, 23 Mei 2008

Konversi Tipe Data dan Casting

Java akan melakukan konversi tipe data secara otomatis jika kedua tipe data tersebut kompatibel. Misalnya dari tipe data int ke tipe data long. Contoh:
int data1 = 10;
long data2 = data1;
Variabel data1 yang bertipe int ditampung ke dalam variabel data2 yang bertipe long, dengan demikian telah terjadi konversi tipe data. Dalam hal ini konversi dilakukan secara langsung oleh Java.
Namun tidak semua tipe data kompatibel satu dengan yang lainnya, misalnya tipe float dengan tipe data int. Float merupakan tipe data pecahan sedangkan int adalah tipe data bilangan bulat. Hal yang sama juga terjadi apabila kita mengkonversi tipe data yang lebih besar ke tipe data yang lebih kecil ukurannya. Misalnya dari tipe data int ke tipe data short.
Konversi tipe data yang tidak kompatibel dapat kita lakukan secara eksplisit yaitu dengan casiting. Sintaks kode;
(target tipe-data) nilai
Contoh kode;
Float data = 10.2F;
Int data2 = (int)data1; //casting dari float ke int
Int data3 = 257;
Byte data4 = (byte)data3. //casting dari int ke byte
Yang perlu diperhatikan di sini adalah jika Anda mengubah tipe data yang berbeda jenis, seperti dari tipe data pecahan ke tipe data bilangan bulat maka akan terjadi pemotongan. Pada contoh di atas maka data2 akan bernilai 10. Sedangkan untuk tipe data yang lebih kecil jika digunakan untuk menampung tipe data yang lebih besar dari daya tampungnya maka yang akan tertampung adalah nilai modulusnya(sisa bagi). Pada contoh di atas, tipe data variabel data4 adalah byte (jumlah maksimum yang dapat ditampung oleh byte adalah 256), sedangkan nilai yang hendak ditampung adalah 257. Dari perhitungan 257/256 dipeoleh modulus=1 maka data4 akan bernilai 1.

Konveri tipe data terkadang dapat menimbulkan kebingungan dan kesalahan logic yang sulit dicari penyebabnya. Perhatikan contoh berikut ini:
int nilai = 26;
double hasil = nilai/4;
Jika kode di atas di eksekusi maka sisi dari variabel hasil adalah 6.0 dan bukan 6.5. Ini disebabkan karena variabel nilai bertipe int sehingga hasil operasi nilai/4 adalah juga bertipe data int yang hanya dapat menampung bilangan bulat saja. Sehingga hasil yang didapat dari nilai/4 adalah 6 dan bukan 6.5.
Untuk menghindari kejadian seperti ini, sebaiknya kita menggunakan tipe data pecahan (double dan float) untuk operasi yang bisa mengahasilkan bilangan pecahan. Atau anda dapat melakukan casting ke tipe data pecahan pada salah satu operan yang terlibat pada operasi tersebut. Contoh kode:
int nilai = 26;
double hasil = (double)nilai/4;

2 komentar:

Anonim mengatakan...

Alhamdulillah, akhirnya solusi ini sangat membantu. Tapi mohon maaf, pada snippet kok ada yang salah ya?

Float data = 10.2F;
Int data2 = (int)data1; //casting dari float ke int
Int data3 = 257;
Byte data4 = (byte)data3. //casting dari int ke byte

Kalau menurut saya kok seperti ini :
Float data = 10.2F;
Int data2 = (int)data; //casting dari float ke int
Int data3 = 257;
Byte data4 = (byte)data3. //casting dari int ke byte

Semoga inisiatif saya benar. Mari belajar bersama :D

Klampok Child mengatakan...

Blog walk... bagus blognya.. cuma ga pernah d update lg ya...
http://klampokChild.blogspot.com