Pada bagian ini, kita akan belajar bagaimana mengunakan typecasting.Typecasting atau casting adalah proses konversi data dari tipe data tertentu ke tipe data yang lain. Kita juga akan belajar bagaimana meng-konversi tipe data primitive ke object dan sebaliknya. Kemudian, pada akhirnya kita akan belajar bagaimana membandingkan sebuah object.

Mengenal Casting, Converting dan Comparing Object
1. Casting Tipe Primitive
Casting antara tipe primitve mendukung Anda untuk mengkonversikan sebuah value dari sebuah tipe data tertentu kepada tipe primitive yang lain. Hal ini biasanya terjadi diantara tipe data numerik.
Ada sebuah tipe data primitive yang tetap tidak dapat kita casting, dan dia adalah tipe data boolean.
Sebagai contoh dari typecasting adalah pada saat Anda menyimpan sebuah integer kepada sebuah variabel dengan tipe data double. Sebagai contoh:
int numInt = 10;
double numDouble = numInt; //implicit cast
Pada contoh ini dapat kita lihat bahwa, walaupu variabel yang dituju (double) memiliki nilai yang lebih besar daripada nilai yang akan kita tempatkan didalamnya, data tersebut secara implisit dapat kita casting ke tipe data double.
Contoh yang lain adalah apabila kita ingin untuk melakukan typecasting sebuah int ke char atau sebaliknya. Sebuah karakter akan dapat digunakan sebagai int karena setiap karakter memiliki sebuah nilai numerik yang merepresentasikan posisinya dalam satu set karakter. Jika sebuah variable memiliki nilai 65, maka cast (char) i akan menghasilkan nilai 'A'. Numerik kode yang merepresentasikan kapital A adalah 65, berdasarkan karakter set ASCII, dan Java telah mengadopsi bagian ini untuk mendukung karakter.
char valChar = 'A';
int valInt = valChar;
System.out.print( valInt ); //casting explisit: keluaran 65
Ketika kita men-convert data yang bertipe besar ke tipe data yang lebih kecil, kita harus menggunakan explicit cast. Explicit casts mengikuti bentuk sebagai berikut:
dimana,
- dataType, adalah nama dari tipe data yang Anda convert
- value, adalah pernyataan yang dihasilkan pada nilai dari the source type.
Sebagai contoh;
double valDouble = 10.12;
int valInt = (int)valDouble; //men-convert valDouble ke tipe int
double x = 10.2;
int y = 2;
int result = (int)(x/y); //hasil typecast operasi ke int
2. Casting Objects
Instances dari class-class juga dapat di pilih ke instance-instance dari class-class yang lain, dengan satu batasan: class-class sumber dan tujuan harus terhubung dengan mekanisme inheritance; satu class harus menjadi sebuah subclass terhadap class yang lain. kita akan akan menjelaskan mengenai inheritance pada kesempatan selanjutnya.
Sejalan dengan pemilihan nilai primitive untuk tipe yang lebih besar, beberapa object mungkin tidak membutuhkan untuk dipilih secara explisit. Faktanya, karena sebuah semua subclass terdiri atas informasi yang sama, Anda dapat menggunakan instance dari subclass diamanpun sebuah superclass diharapkan berada.
Sebagai contoh, mempertimbangkan methode yang memiliki dua argument, satu tipe object dan tipe window yang lain. Anda dapat melewatkan instance dari beberapa class untuk argument object karena semua class java adalah subclass dari object. Untuk argument window, anda dapat melewatkannya kedalam subclassnya, seperti dialog, FileDialog, dan frame. Ini benar dimanapun dalam program, bukan hanya dalam memanggil methode. Jika anda mempunyai variabel yang didefinisikan sebagai window class, anda dapat memberikan object dari kelas tersebut atau dari subclassnya untuk variabelnya tanpa pemilihan.

Figure 2 Contoh Hierarchy Class
Ini dibenarkan dalam kasus yang berkebalikan, dan Anda dapat menggunakan superclass ketika sebuah subclass dibentuk. Ada yang didapatkan dalam kasus ini, bagaimanapun: Karena subclass terdiri dari lebih banyak kemungkinan aksi daripada superclassnya, terdapat kehilangan dalam keseimbangan keterlibatan. Object superclass itu mungkin tidak memiliki semua kemungkinan aksi yang diperlukan untuk aksi pada tempat dari object subclass berada. Sebagai contoh jika anda memiliki operasi yang memanggil methode dalam object dari class integer, mengunakan object dari class Number tidak akan terdiri dari benyak methode yang dispesifikasikan dalam integer. error terjadi jika Anda mencoba untuk memanggil methode yang tidak memiliki object tujuan.
Untuk mengunakan object-object superclass dimana object-object subclass diharapkan, anda harus memilih mereka secara eksplisit. Anda tidak akan kehilangan beberapa informasi dalam pemilihan, tapi anda memperoleh keuntungan dari semua method dan variabel yang mendefinisikan subclass. Untuk memilih sebuah object ke class yang lain, Anda menggunakan operasi yang sama sebagaimana untuk tipe-tipe primitive:
Untuk memilih,
dimana,
- classname, adalah nama dari class tujuan.
- object, adalah sesuatu yang mengarah pada sumber object.
Catatan: pemilihan ini membuat referensi ke object yang lama dari tipe namaclass; object yang lama melanjutkan aksi seperti yang telah ada sebelumnya.

Figure 3 Class Hierarchy untuk superclass Employee
Contoh berikut memilih sebuah instance dari class VicePresident ke sabuah instance dari class Employee; VicePresident adalah sebuah dari Employee dengan lebih banyak information, dimana disini mendefinisikan bahwa VicePresident memilihi executive washroom privileges,
Employee emp = new Employee();
VicePresident veep = new VicePresident();
emp = veep; // tidak adah pemilihan yang diperlukan untuk penggunaan yang cenderung naik
veep = (VicePresident)emp; // Harus memilih dengan pemilihan secara eksplisit
3. Convert Tipe Primitive ke Object Dan Sebaliknya
Satu hal yang tidak dapat Anda lakukan pada beberapa keadaan yaitu pemilihan dari sebuah objectke sebuah tipe data primitive, atau vice versa. Tipe-tipe primitive dan objectadalah sesuatu yang sangat berbeda dalam Java, dan Anda tidak bisa secara langsung memilih diantara dua atau saling menukar diantara keduanya.
Sebagai sebuah alternatif, package java.lang yang terdiri atas class-class yang sesuai untuk setiap tipe data primitivenya 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 capital (Short -> sort, Double -> double dan sebagainya). Juga dua class memiliki nama yang berbeda dari tipe data yang sesuai : Character digunakan untuk variabel char dan Integer untuk variabel int. (Disebut dengan Wrapper Classes) Java merepresentasikan type data dan versi classnya dengan sangat berbeda, dan sebuah program tidak akan berhasil tercompile jika Anda menggunakan hanya satu ketika yang lain juga diperlukan.
Menggunakan class-class yang sesuai untuk setiap tipe primitive, anda dapat membuat sebuah object yang memiliki nilai yang sama.
Contoh:
//Pernyataan berikut membentuk sebuah instance bertype Integer
// class dengan nilai integer 7801 (primitive -> Object)
Integer dataCount = new Integer(7801);
//Pernyataan berikut meng-converts sebuah object Integer ke
//tipe data primitive int nya. Hasilnya adalah sebuah int //dengan nilai 7801
int newCount = dataCount.intValue();
// Anda perlu suatu translasi biasa pada program
// yang meng-convert sebuah String ke sebuah tipe numeric, //seperti suatu int
// Object->primitive
String pennsylvania = "65000";
int penn = Integer.parseInt(pennsylvania);
PERHATIAN: class Void tidak mewakili sesuatu dalam Java, jadi disini tidak ada alasan menggunakannya ketika melakukan translasi antara nilai primitive dan object. Ini adalah penjelasan mengenai kata kunci void, dimana digunakan dalam definisi method untuk mengindikasikan bahwa methode tidak memiliki sebuah nilai kembalian.
4. Comparing Objects
Dalam diskusi kita sebelumnya, kita mempelajari tentang operator untuk membandingkan nilai ---sama, tidak sama, lebih kecil daripada, dan sebagainya. Operator ini yang paling banyak bekerja hanya pada tipe primitive, bukan pada object. Jika Anda berusaha untuk menggunakan nilai lain sebagai operands, Compiler Java akan menghasilkan error.
Pengecualian untuk aturan ini adalah operator untuk persamaan : == (sama) dan != (tidak). Ketika dinampilkan ke object, operator ini tidak akan melakukan apa yang sebenarnya anda inginkan. Malahan mengecheck jika satu object memilki nilai yang sama seperti object lain, mereka mengenali jika kedua sisi dari operator menunjuk object yang sama.
Untuk membandingkan instances dari sebuah class dan memiliki hasil yang berarti, 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. Jika Anda menggunakan operator == untuk membandingkan object ini, bagaimanapun, kita akan mempertimbangkan nilai yang tidak sama. Walaupun isinya sesuai mereka bukan merupakan object yang sama.
Untuk melihat jika dua object String memiliki nilai yang sesuai, sebuah method dari class yang disebuat dengan equals() digunakan. Method menguji setiap character dalam string dan mengembalikan nilai true jika dua 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,
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 kode
String str1, str2;
str1 = "Free the bound periodicals.";

Figure 4 Keduanya mengarah ke object yang sama
Bagian pertama dari program ini mendeklarasikan dua variabel (str1 dan str2), memberikan literal "Free the bound periodicals." untuk str1, dan kemudian memberi nilai tersebut untuk str2. Seperti yang Anda pelajari sebelumnya, str1 dan str2 sekarang menunjuk ke object yang sama, dan uji kesamaan membuktikan hal tersebut.
str2 = new String(str1);
Padabagian yang kedua dari program ini, anda membuat object String baru dengan nilai yang sama sebagai str1 dan memberi str2 ke object baru String tersebut. Sekarang Anda memiliki dua object string yang berbeda yaitu str1 dan str2, keduanya memilki nilai yang sama.Test mereka untuk melihat jika meeka object yang sama dengan menggunakan operator == mengembalikan nilai yang diinginkan : false---mereka buka object yang sama dalam memory. Test mereka menggunakan method equals() juga mengembalikan jawaban yang diinginkan: true---mereka memiliki niali yang sama.

Figure 5 Sekarang mengarah pada object yang berbeda
Catatan: Mengapa Anda tidak dapat hanya menggunakan literal yang lain ketika Anda mengubah str2, lebih dari menggunakan new? String literals diandalkan dalam Java; jika Anda membuat sebuah string menggunakan literal dan kemudian menggunakan literal yang lain dengan character yang sama, Java cukup mengetahui untuk memberikan Anda object String yang pertama kembali. kedua String adalah object yang sama; Anda harus menghidari langkah anda untuk membuat dua object terpisah.
5. Menentukan Class dari sebuah Object
Ingin menemukan apakah sebuah class object itu? Disini langkah untuk melakukannya untuk sebuah object yang diberikan sebagai kunci variabel:
1. Method getClass()
Mengembalikan sebuah object Class (dimana Class itu sendiri merupakan sebuah class) yang memilki sebuah method yang disebut getName(). Pada bagiannya, getName() mengembalikan sebuah string yang mewakili nama class.
Sebagai contoh,
String name = key.getClass().getName();
2. operator InstanceOf
instanceOf memiliki dua operands: suatu mengarahke sebuah object pada sebelah kiri dan nama class pada sebelah kanan. pernyataan mengembalikan nilai true atau false tergantung pada apakah object adalah sebuah instance dari penamaan class atau beberapa dari subclass milik class tersebut.
Sebagai contoh,
boolean ex1 = "Texas" instanceof String; // true
Object pt = new Point(10, 10);
boolean ex2 = pt instanceof String; // false
Semoga bermanfaat & selamat belajar!