Dalam bahasa pemrograman Java kita mengenal tipe data seperti contohnya int, long, double dan sebagainya. Kita juga mengenal tipe object misal object Mobil, Sepeda, Kendaraan dan lain sebagainya. Pada banyak kasus kita sering terpaksa mengubah suatu variabel dengan tipe tertentu kepada tipe yang lain. Mengubah tipe data atau tipe object pada suatu variabel inilah yang disebut dengan istilah Casting. Pada artikel ini kita akan menjelaskan konsep Casting secara sederhana agar mudah dimengerti.
Casting pada Java terdiri dari dua cara, pertama automatic casting, kedua manual casting. Automatic casting adalah mengubah suatu tipe data ke tipe data baru tanpa perlu menyebutkan tipe data baru tersebut. Manual casting adalah mengubah suatu tipe data ke tipe data baru dengan harus menyebutkan tipe data baru tersebut. Mari kita lihat contoh kasus berikut ini.
// Automatic casting
int suatuInteger = suatuShort;
// Manual casting
char suatuChar = (char) suatuLong;
Berbeda dengan automatic casting, pada manual casting perlu disebutkan tipe data barunya. Seperti pada contoh cara penyebutan tipe data baru adalah dalam tanda kurung (char). Sekarang pertanyaannya, kapan kita harus memakai manual casting dan kapan kita harus memakai automatic casting ?. Untuk menjawab pertanyaan tadi kita harus memahami dulu range setiap tipe data pada Java.
Range Tipe Data
Setiap tipe data pada Java memiliki range nilai masing-masing. Ada tipe data yang mempunyai range yang sempit, ada juga tipe data yang mempunyai range yang lebih lebar. Berikut penjelasan masing-masing tipe data.
- Byte, mempunyai range dari -128 sampai 127 dan hanya bilangan bulat.
- Short, mempunyai range dari -32,768 sampai 32,767 dan hanya bilangan bulat.
- Char, mempunyai range dari 0 sampai 65,536 dan hanya bilangan bulat positif.
- Int, mempunyai range dari -2,147,483,648 sampai 2,147,483, 647 dan hanya bilangan bulat.
- Long, mempunyai range dari -9,223,372,036,854,775,808 sampai 9,223,372,036,854,775,807 dan hanya bilangan bulat.
- Float, mempunyai range dari -3.40282347E+38 sampai 3.40282347E+38F dengan 7 angka dibelakang koma.
- Double, mempunyai range dari -1.79769313486231570E+308 sampai 1.79769313486231570E+308 dengan 15 angka dibelakang koma.
Nah dengan mengetahui range tipe data diatas kita bisa dengan mudah memahami perbedaan automatic casting dan manual casting.
Automatic Casting
Automatic casting terjadi apabila tipe data lama sudah pasti juga merupakan tipe data baru. Sebagai contoh :
int i = 24234;
long l = i; // semua int sudah pasti juga merupakan long
Karena int berada dalam range yang lebih sempit dibandingkan dengan long, maka otomatis tipe data int juga merupakan tipe data long. Karena kondisi ini kita hanya perlu melakukan automatic casting dalam kasus ini.
Begitu juga contoh lain :
short s = 234;
int i = s; // semua short sudah pasti juga merupakan int
float f = -1.234f;
double d = f; // semua float sudah pasti juga merupakan double
byte b = 24;
float f2 = b; // semua byte sudah pasti juga merupakan float
Manual Casting
Manual casting dilakukan apabila tipe data lama belum tentu juga merupakan tipe data baru. Sebagai contoh :
long l = 9223372036854775000l;
int i = (int) l; // semua long belum tentu merupakan int
Karena long berada dalam range yang lebih lebar dibandingkan dengan int, maka otomatis tipe data long belum tentu juga merupakan tipe data int. Karena kondisi ini kita perlu melakukan manual casting dalam kasus ini.
Yang perlu diingat manual casting dapat menyebabkan suatu nilai menjadi kehilangan presisi. Seperti contoh diatas, angka 9223372036854775000 tidak mungkin masuk kedalam range int, maka variabel i tidak akan mempunyai nilai yang sama dengan 9223372036854775000.
Contoh lain manual casting :
short s1 = -327;
char c1 = (char) s1;
char c2 = 12;
short s2 = (short) c2;
Karena short (-32,768 sampai 32,767) berada dalam range yang tidak sama dengan char (0 sampai 65,536), maka otomatis belum tentu semua char juga merupakan short dan belum tentu semua short juga merupakan char. Sebagai contoh nilai short -32768 bukan merupakan char tapi nilai short 23 bisa merupakan char. Sebaliknya nilai char 65000 bukan merupakan short tapi nilai char 100 bisa merupakan short. Karena itulah kita perlu menggunakan manual casting baik dalam kasus mengubah data short ke char ataupun dari char ke short.
Dalam kasus lain kita tentu perlu melakukan manual casting untuk mengubah double menjadi long atau float menjadi int. Kasus ini karena nilai double dan float bisa mempunyai angka dibelakang koma (nilai desimal) yang tidak dipunyai oleh tipe data bilang bulat. Jadi belum tentu semua tipe data desimal juga merupakan tipe data bilangan bulat. Jadi kita pasti perlu melakukan manual casting untuk mengubah semua tipe data bilangan desimal kepada tipe data bilangan bulat.
float f = -327.1f;
int i = (int) f;
double d = 1.12d;
long l = (long) d;
Perlu diingat pada contoh kasus diatas bisa menyebabkan nilai variabel f dan d kehilangan presisi karena nilai variable i dan l tidak akan menyimpan nilai angka dibelakang koma dari variabel f dan d.
Nextgen menyediakan kursus Java untuk mendalami lebih detil tentang casting dengan langsung mengerjakan tugas-tugas coding yang berhubungan dengan casting.
Casting Pada Object
Sayangnya pada contoh-contoh sebelumnya kita baru hanya membahas casting pada tipe data primitive. Sedangkan untuk casting pada tipe data object kita akan mendapat tiga variasi kasus lain :
- Casting dari sub class ke super class dan sebaliknya.
- Casting dari interface ke interface, interface ke class dan class ke interface.
- Casting antar Array.
Ketiga kasus diatas akan kita bahas pada artikel-artikel selanjutnya.