Anda di halaman 1dari 22

TIPE DATA, VARIABEL, DAN ARRAY

Dalam bab ini: Pengelompokkan Tipe Data dalam Java Variabel Typecasting Array Satu-Dimensi Array multi-Dimensi Pengenalan Tipe String dalam Java Java dan Pointer (Bagi Programmer C/C++)

Bab 2 ini akan mengemukakan tiga elemen fundamental paling penting dalam pemrograman Java, yaitu tipe data, variabel, dan array. Seperti layaknya bahasa pemrograman tingkat tinggi lainnya, Java juga mendukung beberapa tipe data. Tipe data tersebut selanjutnya dapat digunakan untuk mendeklarasikan variabel maupun array yang kita butuhkan dalam program. 2.1 Pengelompokkan Tipe Data dalam Java Java mendefisikan delapan buah tipe data sederhana: byte, short, int, long, char, float, double, dan boolean. Tipe-tipe tersebut kemudian dikelompokkan menjadi beberapa bagian, yaitu: tipe integer (bilangan bulat), tipe floating-point (bilangan rill), tipe karakter, dan tipe boolean (logika). Integer. Kelompok ini terdiri dari tipe byte, short, int, dan long; yang digunakan untuk merepresentasikan data-data yang bertipe bilangan bulat, misalnya -5, 0, 4, 100, dan sebagainya. Floating-point. Kelompok ini terdiri dari tipe float dan double; yang digunakan untuk merepresentasikan data-data yang bertipe bilangan rill (mengandung pecahan), misalnya -12.34, 0.65, 3.1416, 10.654, dan sebagainya. Karakter. Kelompok ini terdiri dari sebuah tipe data, yaitu char; yang merepresentasikan data dalam bentuk karakter alfanumerik dan simbil, misalnya a, A, 1, 4, $, #, dan sebagainya. Boolean. Kelompok ini juga terdiri dari sebuah tipe data, yaitu char; yang digunakan untuk merepresentasikan nilai logika (benar/salah).

Seperti yang telah dikemukakan sebelumnya, tipe-tipe sederhana di atas merupakan bentuk dasar dari semua tipe kompleks lainnya, seperti array maupun tipe objek; yang akan kita kaji secara tersendiri pada bagian lain dalam buku ini. Tipe sederhana hanya mampu menyimpan nilai tunggal, buka objek-objek yang bersifat kompleks. Meskipun Java mendukung penuh model pemrograman berorientasi objek, namun hal ini tidak berlaku untuk tipe-tipe data sederhana. Tipe-tipe tersebut tidak berbeda dengan

tipe-tipe sederhana yang terdapat pada kebanyakan bahasa pemrograman non-OOP (bahasa yang tidak mendukung model pemrograman berorientasi objek). Bahasa pemrograman lain, seperti C dan C++ mengizinkan ukuran integer yang berbedabeda tergantung dari lingkungan eksekusi yang akan digunakan, sedangkan Java memiliki konsep yang berbeda. Dalam Java, semua tipe data berbeda pada rentang yang tetap untuk setiap lingkungan/platform maupun aksitektur mesin yang berbeda. Sebagai contoh, tipe int selalu berukuran 32 bit. Alasannya adalah agar program dapat berjalan di semua platform tanpa harus mengubah sedikit pun kode yang terdapat di dalammya. 2.1.1 Tipe Integer (Bilangan Bulat) Pada subbab sebelumnya, Anda telah melihat bahwa tipe integer dibedakan menjadi empat jenis tipe, byte, short, int, dan long. Semua tipe ini bersifat signed (bertanda), yaitu tipe data yang dapat merepresentasikan nilai negatif maupun positif. Tidak seperti kebanyakan bahasa pemrograman lain seperti: C, C++, Pascal, dan lainya; Java tidak mendukung niai unsigned (tipe tanpa tanda, yaitu tipe data yang hanya dapat menyimpan nilai positif). Ukuran dan rentang dari tipe integer di dalam Java dapat Anda lihat pada tabel di bawah ini. Tabel 2.1 Ukuran dan rentang dari tipe integer. Tipe Data byte short int long Ukuran (dalam bit) 8 16 32 64 Rentang -128 sampai 127 -32.768 sampai 32.767 -2.147.483.648 sampai 2.147.483.647 -9.223.372.036.854.775.808 sampai 9.223.372.036.854.775.807

2.1.1.1 Tipe byte Tipe ini adalah tipe terkecil dari tipe integer. Tipe byte pada umumnya digunakan pada saat kita bekerja dengan sebuah data steream dari suatu file maupun jaringan, yaitu untuk keperuan proses membaca/menulis. Selain itu, tipe ini juga digunakan pada saat bekerja dengan data biner yang tidak kompatibel dengan tipe-tipe lain yang didefenisikan di dalam Java. Untuk mendeklarasikan variabel bertipe byte, kita perlu menggunakan kata kunci byte. Berikut ini contoh pendeklarasian tiga buah variabel bertipe byte.
byte a; byte b, c;

Cara pendeklarasian variabel di dalam Java akan kita kaji secara lebih detail pada bagian lain dalam Bab 2 ini.

2.1.1.2 Tipe short Tipe ini menggunakan tepe 16-bit yang berada pada rentang nilai -32.768 sampai 32.767. Pada umumnya diaplikasikan pada komputer-komputer 16-bit, yang saat ini semakin jarang keberadaannya. Berikut ini contoh pendeklarasian variabel bertipe short.
short s;

2.1.1.3 Tipe int Tipe ini adalah tipe yang paling banyak digunakan untuk merepresentasikan nilai integer karena dianggap paling efisien dibandingkan dengan tipe-tipe integer lainnya. Tipe integer banyak digunakan untuk indeks dalam struktur pengulangan maupun dalam konstuksi sebuah array. Selain itu, secara teori, setiap ekspresi yang melibatkan tipe integer (byte, short, int, dan long) semua akan dipromosikan ke tipe int terlebih dahulu sebelum proses perhitungan dilakukan. Sebagai contoh, perhatikan kode program berikut ini. Program 2-1
class ContohPerhitungan { public static void main(String[]args){ byte a = 1; short b = 2; int c = 3, d; d = a + b + c; System.out.println("Hasil = " + d) ; } }

Hasil akan tampil di layar sebagai berikut: Hasil = 6 Di sini, secara internal variabel a (byte) dan b (short) akan dopromosikan ke tipe int terlebih dahulu sebelum akhirnya operasi perhitungan di atas dilakukan. 2.1.1.4 Tipe long Tipe ini digunakan untuk kasus-kasus tertentu yang nilainya berada di luar rentang int. Dengan kata lain, tipe long biasanya terpaksa digunakan pada saat tipe int sudah tidak cukup lagi untuk menampungnya. Berikut ini contoh penggunaan tipe data long untuk mendeklarasikan sebuah variabel.
long jumlahDetik; long jarak;

2.1.2 Tipe Floating-Point (Bilangan Rill) Tipe floating-point digunakan untuk merepresentasikan nilai-nilai yang mengandung pecahan atau angka desimal di belakang koma, seperti 3.1416, 5.25, dan sebagainya. Bilanganbilangan semacam ini sering disebut dengan bilagan rill. Dalam Java, tipe foating-point dibedakan menjadi dua jenis, yaitu: float dan double. Contoh kasus sederhana yang membutuhkan tipe data ini adalah menghitung luas dan keliling lingkaran serta perhitunganperhitungan yang melibatkan trigonometri (misalnya: sinus dan cosinus). Adapun ukuran dan rentang nilai dari kedua buah tipe tersebut ditunjukkan oleh tabel di bawah ini. Tabel 2.2 Ukuran dan rentang dari tipe floating-point. Ukuran Tipe Data (dalam bit) float 32 double 64 2.1.2.1 Tipe float Tipe ini digunakan untuk menandakan nilai-nilai yang mengandung presisi atau ketelitian tunggal (single-precision) yang menggunakan ruang penyimpanan 32-bit. Presisi tunggal biasanya lebih cepat untuk prosesor-prosesor tertentu dan memakan ruang penyimpanan setengah kali lebih sedikit dibandingkan dengan presisi ganda (double precision). Permasalahan yang akan timbul adalah apabila kita menggunakan tipe float untuk nilai-nilai yang terlalu kecil atau justru terlalu besar, karena nilai yang dihasilkan akan menjadi tidak akurat. Contoh pendeklarasian variabel dengan menggunakan tipe float dapat Anda lihat pada kode di bawah ini.
float x, y; float suhu;

Rentang 3.4e-038 sampai 3.4e+038 1.7e-308 sampai 1.7e+308

2.1.2.2 Tipe double Tipe ini mengandung tingkat ketelitian ganda atau presisi ganda dan menggunakan ruang penyimpanan 64-bit untuk menyimpan nilai pada prosesor-prosesor modern seperti saat ini yang telah dioptimasi untuk melakukan perhitungan-perhitungan matematis dengan kecepatan tinggi, tipe double sebenarnya justru akan lebih cepat dari tipe float. Semua fungsi matematis di dalam Java, seperti sin (), cos (), dan sqrt () akan mengembalikan nilai yang bertipe double. Apabila Anda ingin melakukan perhitungan-perhitungan yang melibatkan bilangan rill dan membutuhkan hasil dengan tingkat ketelitian yang tinggi di dalam program Anda, maka tipe double akan menjadi plihan terbaik.

Berikut ini contoh kode yang menunjukkan penggunaan tipe double di dalam program. Program 2-2
class KelilingLingkaran { public static void main(String[]args){ double pi = 3.1416; double r = 2.12; double keliling; keliling = 2 * pi * r; System.out.println("Keliling lingkaran = " + keliling); } }

Hasil yang akan ditampilkan di layar sebagai keluaran sebagai berikut: Keliling lingkaran = 13.320384

2.1.3 Karakter Sama seperti layaknya bahasa pemrograman lain, dalam Java, tipe data yang digunakan untuk menyimpan nilai berupa karakter adalah char. Namun, Anda perhatikan (khusus bagi Anda yang berangkat dari pemrograman C/C++) bahwa tipe char dalam Java sangat berbeda dengan char yang terdapat pada C/C++. Apa alasannya ? Dalam C/C++, char merupakan sebuah tipe integer dengan ukuran 8-bit. Adapun Java menggunakan karakter Unicode untuk merepresentasikan semua karakter yang ada. Unicode mendefinisikan sekumpulan karakter yang terdapat pada semua bahasa (dalam lingkup internasional), seperti bahasa Latin, Arab, Yunani, dan banyak lagi lainnya. Untuk kebutuhan seperti ini, Java membutuhkan ukuran 16bit untuk tipe karakter, an berada pada rentang nilai 0 sampai 65.536. Kumpulan karakter standar (yang biasa disebut dengan karakter ASCII) berada pada rentang 0 sampai 127, dan perluasan sekumpulan karakter 8-bit (ISO-Latin-1) rentang nilainya 0 sampai 255. Karen abahasa Java dirancang untuk dapat diterapkan di berbagai macam platform, maka Java menggunakan karakter Unicode yang membutuhkan ukuran 16-bit. Ukuran sebesar ini sebenarnya tidak cocok untuk diterapkan pada bahasa-bahasa seperti Indonesia, Inggris, Jerman, maupun Perancis; yang sebenarnya cukup dengan menggunakan karaker 8-bit. Namun harus bagaimana lagi ? Mungkin inilah harga yang harus dibayar untuk arti sebuah portabilitas. Berikut ini contoh kode yang menunjukkan penggunaan tipe char di dalam sebuah program.

Program 2-3
class DemoKarakter1 { public static void main(String[]args){ char ch1 = 65; char ch2 = B; System.out.println("ch1 = " + ch1) ; System.out.println("ch2 = " + ch2) ; } }

Program di atas akan memberikan hasil seperti berkut: ch1 = A ch2 = B Seperti yang Anda lihat di atas, nilai 65 dari tipe char akan sama dengan karakter A. Hal ini disebabkan karena dalam karakter ASCII maupun Unicode, karakter A dibeli kode 65. Perlu Anda perhatikan juga, meskipun dalam Java tipe char bukan termasuk dalam tipe integer, namun kita masih dapat melakukan operasi terhadapnya seakan-akan tipe char tersebut adalah tipe tipe integer. Dengan kata lain, kita akan melakukan konversi dari tipe karakter ke tipe integer. Berikut ini contoh kode program yang akan menunjukkan hal tersebut. Program 2-4
class DemoKarakter2 { public static void main(String[]args){ char ch = A; System.out.println("ch = " + ch) ; ch++; //sama dengan ch = ch + 1; System.out.println("ch = " + ch) ; } }

Hasil yang akan ditampilkan di layar sebagai berikut: ch = A ch = B Dari program di atas dapat kita simpulkan bahwa kita juga dapat melakukan increment (menaikkan nilai sebesar 1) terhadap tipe char, sama seperti pada saat kita bekerja dengan tipe integer.

Sebagai tambahan, untuk karakter-karakter yang tidak dapat diketikkan secara langsung melalui keyboard, Java menyediakan beberapa escape sequence; yaitu pasangan karakter yang sianggap sebagai karakter tunggal. Escape sequence selalu diawali dengan backslash (\). Sebagai contoh, \ digunakan untuk menuliskan karakter petik ganda, \n digunakan untuk menuliskan baris baru. Selain itu juga trdapat mekanisme untuk memasukkan nilai-nilai karakter dalam bentuk oktal maupun heksadesimal. Untuk notasi oktal (basis 8), digunakan tanda backslash dengan diikuti tiga digit nomor yang akan diisikan, misalnya: \141 adalah nilai oktal dari karakter a. Adapun untuk notasi heksadesimal (basis 16), gunakan backslash-u (\u), kemudian diikuti dengan empat digit nomor heksadesimal yang dimaksud. Sebagai contoh, \u0061 adalah karakter a. Tabel berikut ini akan menunjukkan daftar escape sequence dalam bahasa Java yang dapat anda gunakan di dalam program. Tabel 2.3 Daftar escape sequence dalam Java Escape sequence \ddd \uxxxx \ \ \\ \r \n \f \t \b Keterangan Karakter oktal (ddd) Karakter Unicode heksadesimal (xxxx) Petik tunggal Petik ganda Backslash Carriage return Baris baru (disebut juga dengan line feed) Form feed Tab Backspace

Seperti yang Anda lihat di atas, escape sequence sebenarnya terdiri atas dua atau beberapa karakter (yang selalu diawali dengan karakter backspace). Namun escape sequence tidak dianggap sebagai string, melainkan tetap dianggap sebagai tipe karakter khusus, yang telah menjadi satu-kesatuan. Berikut ini contoh kode yang akan menunjukkan penggunaan escape sequence \t (tab), \ (petik tunggal), dan \n (baris baru). Program 2-5
class DemoEscapeSequence { public static void main(String[]args){ System.out.print("Hari\t\t: Jum\at\n") ; System.out.print("Tanggal\t\t: 12 Januari 2007\n) ; } }

Hasil yang akan diberikan oleh program di atas sebagai berikut: Hari Tangga : Jumat : 12 Januari 2007

Pada program di atas kita memasukkan dua buah karakter tab setelah teks Hari dan Tanggal. Demikian pula pada teks Jumat, di situ kita meletakkan tanda petik tunggal dengan menggunakan karakter \. Adapun \n digunakan untuk memasukkan karakter Enter (line feed) di dalam teks yang kita buat. 2.1.4 Tipe Boolean Tipe boolean adalah tipe yang digunakan untuk menampung nilai logika, yaitu nilai yang hanya memiliki dua buah kemungkinan: benar atau salah. Tipe ini ditandai dengan kata kunci boolean. Dalam bahasa C, nilai boolean direpresentasikan dengan nilai 0 (untuk nilai salah) dan bilangan selain nol (biasanya bernilai 1 untuk nilai benar). Sedangkan dalam bahasa Java, nilai benar direpresentasikan dengan kata kunci true dan nilai salah dengan kata kunci false. Dalam Java, nilai true dan false tidak dapat dikonversi ke tipe numerik. Nilai true di Java tidak sama dengan 1, dan false juga tidak sama dengan nol. Hal ini, tentu berbeda dengan konsep tipe boolean yang terdapat dalam bahasa C/C++. Ini berarti bahwa kita tidak dapat memasukkan nilai integer ke dalam tipe boolean. Perhatikan contoh berikut:
boolean b; b = 1; b = true; b = 0; b = false; //SALAH //BENAR //SALAH //BENAR

Tipe boolean adalah tipe yang dikembalikan oleh semua operator relasional (yang akan dibahas opeh kelompok 2), yang selalu dibutuhkan pada saat kita menuliskan ekspresi/kondisi dalam struktur pemilihan dan pengulangan, seperti: if, for, dan while. Berikut ini contoh kode yang akan mendemonstrasikan penggunaan tipe data boolean di dalam sebuah program sederhana.

Program 2-6
class DemoBoolean1 { public static void main(String[]args){ boolean b; b = true; System.out.println("Nilai b = " + b) ; If (b){ System.out.println("Statemen ke-1 dieksekusi) ; } b = false; System.out.println("Nilai b = " + b) ; If (b){ System.out.println("Statemen ke-2 tidak akan dieksekusi) ; } If (!b){ System.out.println("Statemen ke-3 dieksekusi) ; } System.out.println(5 <= 10 mengembalikkan nilai + (5 <= 10)); System.out.println(4 > 6 mengembalikkan nilai + (4 > 6)); } }

Pada saat dijalankan, program tersebut akan memberikan hasil seperti berikut: Nilai b = true Statemen ke-1 dieksekusi Nilai b = false Statemen ke-3 dieksekusi 5 <= 16 mengembalikan nilai false Apabila diperhatikan, terdapat tiga hal menarik dari program di atas. Pertama, dalam Java nilai variabel boolean yang dipanggil dari method println() akan ditampilkan dengan teks true dan false. Kedua, apabila kita menggunakan tipe boolean dalam ekspresi pada struktur if, kita hanya perlu menuliskan kode seperti berikut:
if (b){ ... }

tidak perlu menuliskannya sebagai berikut:


if (b == true){ ... }

Yang ketiga, ekspresi boolean yang dipanggil langsung dari method println() juga akan ditampilkan dalam bentuk teks true dan false sesuai dengan nilai yang dihasilkan dari ekspresi tersebut. Dalam contoh ini, ekspresi (5 <= 10 ) menghasilkan keluaran true dan ekspresi (4 > 6) menghasilkan keluaran false. Adapun contoh lain penggunaan tipe boolean dalam ekspresi pada struktur pengulangan sebagai berikut: Program 2-7
class DemoBoolean2 { public static void main(String[]args){ int index = 0; while (index < 5) { System.out.print("Baris ke-" + (index+1)) ; index++; } } }

Baris ke-1 Baris ke-2 Baris ke-3 Baris ke-4 Baris ke-5 Anda tidak perlu cemas andaikata Anda belum dapat memahami maksud kode di atas. Pembahasan mengenai pengulangan dan pemilihan akan dibahas oleh kelompok selanjutnya.

2.2 Variabel Sama halnya seperti pada bahasa pemrograman lain, dalam Java, variabel juga merupakan unit dasar yang diperlukan untuk menyimpan suatu nilai dengan tipe data tertentu di dalam memori komputer. Setiap variabel memiliki lingkup (scope) dan waktu hidup di dalam memori. 2.2.1 Medeklarasikan Variabel Berikut ini bentuk umum cara mendeklarasikan variabel di dalam bahasa Java.

Tipe namaVariabel; Tipe namaVariabel1; Variabel2, ... variabel

//untuk mendeklarasikan sebuah variabel //untuk mendeklarasikan beberapa

Sebagai contoh, apabila kita ingin mendeklarasikan variabel dengan nama x dan tipe data int, maka kita harus menuliskannya sebagai berikut:
int x;

Java juga memberikan kebebasan kepada para programmer untuk mendeklarasikan beberapa buah variabel bertipe sama secara sekaligus dengan menggunakan tanda koma sebagai pembatasannya, seperti yang tampak pada kode di bawah ini.
int x, y, z; char ch1, ch2; //mendeklarasikan variabel x, y, z dengan tipe int //mendeklarasikan variabel ch1 dan ch2 dengan tipe char

Terdapat beberapa batasan yang harus diperhatikan dalam penentuan nama variabel pada saat proses deklarasi, yaitu sebagai berikut: Nama variabel tidak boleh mengandung spasi. Contoh:
int Bilangan Bulat; int BilanganBulat; int Bilangan_Bulat; //SALAH //BENAR //BENAR

Nama variabel tidak boleh berupa angka atau diawali oleh karakter numerik (angka) Contoh:
boolean 1; double 2Dimensi [][]; double T1; //SALAH //SALAH //BENAR

Nama variabel tidak boleh mengandung karakter simpol, kecuali tanda $. Contoh:
char Simbol#; char $a; //SALAH //BENAR

Nama variabel tidak boleh menggunakan kata kunci yang sudah didefenisikan di dalam Java Contoh:
byte while; boolean break; //SALAH //SALAH

Dalam suatu blok program, nama variabel harus bersifat unik atau berbeda satu sama lain.

Contoh:
Int a = 0; If (a == 0) Int a = Int b = Int b = ... } { 3; 4; 5;

//BENAR //BENAR //SALAH

Usahakan nama variabel sedeskriptif mungkin sehingga kode program dapat lebih mudah untuk dipahami oleh orang lain (terutama bila bekerja dengan tim).

Dalam bahasa Java itu sendiri , nama variabel selalu diawali dengan huruf kecil, misalnya: isExit, isBoolean, isVisible, dansebagainya. Ini juga berlaku untuk nama method di dalam suatu kelas, misalnya: toString(), /, dan sebagainya.

2.2.2 Inisialisasi Variabel Java mengizinkan kita untuk melakukan inisialisasi nilai terhadap variabel yang dideklarasikan. Nilai inisial adalah nilai yang digunakan sebagai nilai awal (default) sebelum akhirnya variabel tersebut diisi/diganti dengan nilai lain. Bentuk umum dari proses inisialisasi nilai ke dalam variabel sebagai berikut: tipe namaVariabel = nilai; tipe namaVariabel1 = nilai1, nama Variabel2 = nilai2; Berikut ini dua buah contoh kode yang menunjukkan proses inisialisasi nilai pada saat kita mendeklarasikan variabel.
int index = 0; char ch = A;

Kode di atas menunjukkan bahwa kita mendeklarasikan variabel bernama index yang bertipe int dengan nilai awal 0, dan variabel ch yang bertipe char dengan nilai awal berupa karakter A. 2.2.3 Lingkup dan Daur Hidup Variabel Variabel yang dideklarasikan di dalam lingkup (scope) atau blok tertentu hanya akan dikenali dalam lingkup bersangkutan saja. Dalam Java, blok diawali dengan tanda { dan diakhiri dengan tanda }. Dalam bahasa Pascal, tanda tersebut direpresentasikan dengan kata kunci begin dan end. Perhatikan contoh kode program berikut ini.

Program 2-8
class LingkupVariabel { public static void main(String[]args){ int a = 10; if (a > 5) { //awal blok int b = 15; System.out.println("Nilai a di dalam blok if: " + a) ; System.out.println("Nilai b di dalam blok if: " + b) ; } //akhir blok System.out.println("Nilai a di luar blok if: " + a) ; //SALAH //System.out.println("Nilai b di luar blok if: " + b) ; } }

Hasil yang akan diberikan dari program di atas adalah sebagai berikut: Nilai a di dalam blok if : 10 Nilai b di dalam blok if : 15 Nilai a di luar blok if : 10 Pada contoh kode di atas, variabel b dideklarasikan di dalam blok if sehingga tidak akan dikenali lagi dari luar blok bersangkutan.

2.3 Typecasting Dalam kasus-kasus pemrograman tertentu, ada kalanya kita perlu megubah tipe dari data dari satu tipe tertentu ke tipe lainnya. Apabila kedua tipe tersebut kompatibel atau cocok, maka Java akan melakukan konversi tipe secara otomatis. Sebagai contoh, kita selalu dapat memasukkan nilai bertipe int ke variabel yang dideklarasikan dengan tipe long. Namun, apabila keduanya tidak kompatibel, maka secara eksplisit kita perlu melakukan typecast terhadap variabel yang akan dikonversi tersebut. Typecasting adalah proses pemeranan (casting) tipe data dari satu tipe tertentu ke tipe data lainnya. 2.3.1 Konversi Otomatis dalam Java Pada saat kita memasukkan nilai ke dalam suatu variabel yang memiliki tipe data tertentu dengan nilai dari tipe data lain, maka Java secara internal akan melakukan konversi otomatis, dengan syarat-syarat sebagai berikut: Kedua tipe data tersebut kompatibel (tipe data asal dan tipe data tujuan) Tipe data tujuan memiliki rentang lebih besar dari tipe data asal.

Sebagai contoh, tipe int selalu memiliki rentang nilai yang lebih besar dibandingkan tipe byte , sehingga kita tidak perlu melakukan konversi secara eksplisit dari tipe byte ke tipe int. Perhatikan contoh kode berikut:
byte b = 2; int c = b;

Tidak perlu dituliskan seperti berikut:


int c = b;

2.3.2 Konversi Tipe Data yang Tidak Kompatibel Meskipun konversi otomatis sangat membantu, namun hal itu tidak dapat menjawab semua kasus atau permasalahan yang ada. Misalnya, apabila kita ingin melakukan konversi dari tipe byte ke tipe int, Java tidak akan melakukan konversi secara otomatis. Dalam kasus ini, konversi otomatis tidak dapat dilakukan karena tipe byte memiliki rentang nilai yang lebih kecil dibangingkan dengan tipe int. Untuk konversi data yang tidak kompatibel satu sama lain, kita harus melakukannya secara eksplisit. Berikut ini bentuk umum yang digunakan dalam bahasa Java untuk melakukan typecasting. (typeTarget) nilai Di sini, tipeTarget adalah tipe tujuan yang diinginkan. Sebagai contoh, kode berikut akan mengonversi tipe int ke tipe byte. Perlu untuk diperhatikan, bahwa hasil konversi dari tipe int ke tipe byte adalah sisa bagi dari nilai yang akan dikonversi dibagi dengan rentang nilai dari type byte.
int a = 257; byte b = (byte) a; //typecasting dari tipe byte ke type int

Melalui kode tersebut, variabel b akan bernilai 1. Mengapa 1? Nilai ini adalah sisa bagi dari 257/256. Dalam hal ini, nilai 257 adalah nilai yang akan dikonversi dan 256 adalah jumlah rentang nilai yang terdapat pada type byte (yaitu dari -128 sampai 127). Selanjutnya kita juga dapat melakukan konversi dari bilangan rill (tipe floating-point) ke bilangan bulat (tipe integer). Pada kasus semacam ini, nilai desimal yang terdapat di belakang koma akan dibuang. Sebagai contoh, sekarang kita akan mengonversi nilai dari tipe double ke tipe int. Perhatikan potongan kode berikut:
double d = 274.5678; int x = (int) d; //typecasting dari tipe double ke type int

Di sini, variabel x akan bernilai 274 dan nilai pecahannya (0.5678) akan dibuang. Bagaimana bila kita ingin melakukan konversi dari tipe double ke tipe byte? Secara internal, Java akan melakukan dua tahap. Pertama, tipe double akan dikonversi terlebih dahulu ke tipe int. Dan yang kedua, hasil konversi tersebut (yang sudah bertipe int) akan dikonversi menjadi tipe byte. Sebagai contoh, perhatikan potongan kode berikut:
double d = 274.5678; byte b = (byte) d; //typecasting dari tipe double ke type byte

Kode tersebut akan menyebabkan variabel b bernilai 18. Dari mana niai 18 tersebut? Mula-mula nilai 274.5678 akan dikonversi ke tipe int, hasilnya adalah 274. Selanjutnya, nilai 274 ini akan dikonversi ke byte, hasilnya adalah 18, yaitu sisa bagi dari 274/256. Untuk membuktikannya, perhatikan contoh kode program di bawah ini. Program 2-9
class DemoKonversi { public static void main(String[]args){ int a = 257; double d = 274.5678; // typecasting dari tipe int ke tipe byte byte b; b = (byte) a; System.out.println("Typecasting dari tipe int ke tipe byte") ; System.out.println("int: " + a) ; System.out.println("byte: " + b) ; // typecasting dari tipe double ke tipe int int x; x = (int) d; System.out.println("\nTypecasting dari tipe double " + "ke tipe int"); System.out.println("double: " + d) ; System.out.println("int: " + x) ; // typecasting dari tipe double ke tipe byte b = (byte) d; System.out.println("\nTypecasting dari tipe double " + "ke tipe byte"); System.out.println("double: " + d) ; System.out.println("byte: " + b) ; } }

Hasil yang akan diberikan dari program di atas sebagai berikut: Typecasting dari tipe int ke tipe byte int: 257 byte: 1 Typecasting dari tipe double ke tipe int double: 274.5678 int: 274 Typecasting dari tipe double ke tipe byte double: 274.5678 byte: 18

2.4 Promosi Tipe Data di dalam Ekspresi Seperti yang telah disinggung pada subbab sebelumnya, di dalam ekspresi, tipe data byte dan short akan dipromosikan ke tipe int. Perhatikan kembali contoh kode berikut:
byte a = 20; byte b = 30; byte c = 40; int d = a* b + c;

Meskipun variabel a, b, dan c masing-masing bertipe byte, namun di dalam ekspresi di atas, variabel-variabel tersebut akan dipromosikan ke dalam tipe int tanpa harus melakukan typecasting terlebih dahulu. Dengan adanya promosi tipe data yang terdapat dalam Java, Anda juga perlu berhati-hati, karena hal ini justru dapat menyebabkan compiler bingung pada saat melakukan kompilasi kode program. Sebagai contoh, coba Anda perhatikan kode berikut:
byte a = 20; byte b = a *3; //SALAH

Kode tersebut dianggap salah, mengapa demikian ? Karena variabel a akan dipromosikan ke tipe int, kemudian dikali dengan bilangan 3, sehingga hasilnya pun akan bertipe int. Jadi, seharusnya kita mendeklarasikan variabel b dengan tipe int. Meskipun demikina, kita bias saja mendeklerasikan variabel b dengan tipe byte. Berikut ini kode program yang dapat memperbaiki kesalahan tersebut.
byte a = 20; byte b = (byte) (a * 3); //BENAR

2.4.1 Batasan Promosi Tipe Data Apabila operand dalam ekspresi bertipe byte dan short, maka hasilnya akan dipromosikan ke tipe int, seperti yang baru saja kita bahas pada subbab sebelumnya. Namun, apabila terdapat operand yang bertipe long maka hasilnya akan dipromosikan ke tipe long. Begitu juga pada ekspresi yang melibatkan tipe floating-point; apabila dalam ekspresi terdapat operand yang bertipe float, maka promosinya adalah ke tipe float. Yang terakhir, apabila terdapat operand dengan tipe double, maka hasilnya pun akan dipromosikan ke dalam tipe double. 2.5 Array Array adalah sekumpulan variable bertipe sama yang diacu dengan nama yang sama. Masing-masing elemen array dapat diakses melalui indeksnya. Dalam Java, indeks array selalu bertipe integer yang dimulai dari 0. Berikut ini gambar yang dapat mengilustrasikan sebuah array. A[0] 10 A[1] 20 A[2] 30 A[3] 40 A[4] 50

Gambar 3.1 Array berisi 5 elemen Gambar di atas menunjukkan array A yang berisi lima buah elemen bertipe integer, yaitu 10, 20, 30, 40, dan 50. Setiap elemen array tersebut dapat diakses dengan cara A[indeks]. Khusus bagi Anda yang berangkat dari pemrograman C/C++, perilaku array di dalam Java tidaklah sama dengan perilaku yang terdapat pada bahasa C/C++ yang dapat dimanipulasi pointer. 2.5.1 Array Satu-Dimensi Array dideklarasikan dengan tanda [] (bracket). Dalam Java, bentuk umum dari deklarasi array satu-dimensi sebagai berikut: tipe namaArray[]; atau dapat pula dituliskan seperti berikut: tipe [] namaArray; Dalam buku ini, kita akan menggunakan bentuk umum kedua. tipe di atas manandakan tipe (base type) dari setiap elemen array yang ada. Dengan kata lain, tipe dasar akan menentukan jenis data apa yang akan disimpan dalam masing-masing elemen array bersangkutan. Sebagai contoh, apabila kita ingin mengetahui jumlah hari dari masingmasing bulan, maka kita dapat mengimplementasikannya melalui sebuah array. Misalnya, di sini kita akan menamai array tersebut dengan nama jumlahHari dan tipe

data dari masing-masing elemennya adalah tipe int, maka kita akan dapat menuliskannya sebagai berikut:
int [] jumlahHari;

Sampai di sini, kita hanya mendeklarasikan variabel bertipe array. Artinya, jumlah elemen dan nilai-nilai dari setia[p elemennya masih di-set dengan nilai null. Untuk menentukan jumlah elemen dari array tersebut, kita perlu mengalokasikan ruang memori dengan menggunakan kata kunci new. Pembahasan tentang kata kunci new itu sendiri akan kita kaji lebih mendalam pada pembahasan berikutnya, namun yang jelas kita disini kita dapat menggunakannya untuk penentuan jumlah elemen array. Berikut ini bentuk umum penggunanaannya: variabelArray = new tipe[jumlaElemen]; Dalam kasus ini, kita akan menentukan array dengan jumlah elemen sebanyak 12 (sejumlah bulan yang terdapat dalam satu tahun) sehingga kita perlu menuliskan kode berikut:
jumlahHari = new int[12];

Sampai pada tahap ini, variabel jumlahHari akan mengacu ke array dengan 12 elemen bertipe int, dan nilai dari setiap elemennya akan di-set dengan nila 0. Selanjutnya, untuk mengisikan nilai dari masing-masing elemen array tersebut, kita harus menggunakan indeks, sebagai berikut:
jumlahHari[0] = 31;

Kode di atas akan memasukkan nilai 31 ke dalam elemen array pertama (dalam hal ini berarti bulan Januari memiliki 31 hari). Ingat, indeks array dimulai dari 0, bukan1. Berikut ini contoh kode program yang akan mendemonstrasikan dan penggunaan array di dalam Java.

Program 2-10
class DemoArray1D { public static void main(String[]args){ // mendeklarasikan variabel bertipe array dengan tipe int int [] jumlahHari; // menentukan jumlah elemen array jumlahHari = new int[12]; // mengisi nilai dari setiap elemen array yang ada jumlahHari[0] = 31; jumlahHari[1] = 28; jumlahHari[2] = 31; jumlahHari[3] = 30; jumlahHari[4] = 31; jumlahHari[5] = 30; jumlahHari[6] = 31; jumlahHari[7] = 31; jumlahHari[8] = 30; jumlahHari[9] = 31; jumlahHari[10] = 30; jumlahHari[11] = 31; // menampilkan salah satu elemen array System.out.println("Bulan Maret memiliki " + jumlahHari[2] + "hari.") ; } }

Hasil yang akan diberikan oleh program di atas sebagai berikut: Bulan Maret memiliki 31 hari. Pada kenyataannya, para professional Java umumnya menggabungkan deklarasi array dengan penentuan jumlah elemennya seperti yang tampak pada kode berikut:
int[] jumlahHari = new int[12];

atau
int jumlahHari[] = new int[12];

selain itu, array juga dapat diinisialisasi pada saat diseklarasikan. Nilai-nilai untuk setiap elemennya berada pada blok yang diawali dengan tanda { dan diakhiri dengan tanda }, serta setiap elemennya dibatasi dengan tanda koma (,). Perlu untuk diperhatikan bahwa setelah blok inisialisasi, kita harus menambahkan titik koma (;). Untuk lebih jelasnya, perhatikan contoh kode berikut yang merupakan modifikasi dari program sebelumnya. Pada contoh ini, nilai dari setia elemen array akan diinisialisasi pada saat deklarasi.

Program 2-11
class InisialisasiArray1D { public static void main(String[]args){ // mendeklarasikan variabel bertipe array dengan tipe int // sekaligus menginisialisasi nilai untuk setiap elemennya int [] jumlahHari = {31,28,31,30,31,30,31,31,30,31,30,31}; System.out.println("Bulan Maret memiliki " hari.) ; } } " + jumlahHari[2] +

Hasil yang akan diberikan oleh program ini akan sama dengan hasil yang diberikan oleh program sebelumnya. 2.5.2 Array Multi-Dimensi Array multi-dimensi sebenarnya merupakan array dari array. Artinya, terdapat sebuah array yang setiap elemennya juga bertipe array. Cara umum dalam Java untuk mendeklarasikan array dua-dimensi sebagai berikut: tipe namaArray [][]; atau tipe[][] namaArray; Adapun untuk array tiga-dimensi, bentuk umumnya sebagai berikut: tipe namaArray [][][]; atau tipe[][][] namaArray; Dalam materi ini, kita hanya akan focus ke pembahasan atau array dua-dimensi. Berikut ini contoh pendeklarasian array dua-dimensi dengan jumlah baris 2 dan jumlah kolom 3, yang setiap elemennya bertipe int.
int[][] duaD = new int[2][3];

Apabila digambarkan, maka posisi dari setiap elemennya seperti berikut: duaD[0][0] duaD[1][0] duaD[0][1] duaD[1][1] duaD[0][2] duaD[1][2]

Gambar 3.2 Array dua dimensi 3x2

Berikut ini contoh kode program yang akan mendemonstrasikan penggunaan dua dimensi dalam Java. Program 2-12
class DemoArray2D { public static void main(String[]args){ int[][] duaD = new int[2][3]; int k = 1; for(int i=0; i<2; i++) { for (int j=0; j<3; j++) { duaD[i][j] = k * 10; System.out.print(duaD[i][j]) ; if (j < 2)System.out.print(" "); k++; } System.out.println(); } } }

Apabila dijalankan, program di atas akan memberikan hasil seperti berikut: 10 20 30 40 50 60 Kita juga dapat melakukan inisialisasi nilai pada array dua dimensi, yaitu melalui cara seperti berikut:
int[][] duaD = {{10, 20, 30}, {40, 50, 60}};

Berikut ini contoh program yang merupakan modifikasi dari program di atas. Pada contoh ini, nilai dari setiap elemen array dua dimensi akan diinisialisasikan pada saat deklarasi. Program 2-13
class InisialisasiArray2D { public static void main(String[]args){ int[][] duaD = {{10, 20, 30}, {40, 50, 60}}; for(int i=0; i<2; i++) { for (int j=0; j<3; j++) { System.out.print(duaD[i][j]) ; if (j < 2)System.out.print(" "); k++; } System.out.println(); } } }

Hasil yang akan diperoleh sama persis pada program sebelumnya. Apabila Anda masih belum memahami kode program di atas, anda tidak perlu cemas karena struktur pemilihan if dan struktur pengulangan for akan dibahas kelompok selanjutnya. 2.6 Pengenalan Tipe String dalam Java Sejauh ini kita membahas tipe data sederhana, variabel, dan array; tapi mengapa kita tidak atau belum membahas mengenai tipe string di dalam bab 2 ini? Jawabannya, karena dalam Java, string bukan merupakan tipe sederhana, dan bukan juga array dari karakter (seperti konsep string yang terdapat dalam C/C++). Dalam Java, string didefinisikan sebagai suatu objek. Karena alas an itulah, kita baru akan membahas nantinya setelah kita membahas mengenai objek itu sendiri. Java telah mendefinisikan objek string untuk merepresentasikan tipe string. Sebagai perkenalan, berikut ini contoh pendeklarasian variabel bertipe string di dalam Java.
String str; Str = Contoh string di dalam Java;

Di sini, str adalah objek tipe string, bukan variabel dari tipe sederhana; seperti yang sejauh ini kita bahas. Maka dari itu, srt memiliki method khusus untuk memanipulasi nilai di dalamnya. Dengan demikian kita dapat memanggil method-method dari tipe string melalui objek str, seperti yang tampak pada contoh kode berikut:
int posisiJ = str.charAt(J); System.out.println(str.toUpprecase());

Tipe string ini akan kita bahas secara lebih detail pada pembahasan selanjutnya. Meskipun demikian, sebelum menginjak pada pembahasan tersebut, kita akan sering menggunakan di dalam contoh-contoh program kita. Yang perlu Anda ketahui, untuk saat ini hanyalah bagaimana Anda mendeklarasikan objek yang bertipe srting.

2.7 Java dan Pointer (Bagi Programmer C/C++) Anda para programmer C/C++, tentu akan mencari fitur-fitur yang berkaitan pointer di dalam Java. Perlu sekali untuk diperhatikan, Java tidak mendukung adanya pointer. Mungkin para programmer C/C++ akan berpikir bahwa ini adalah suatu kelemahan yang terdapat di dalam Java. Akan tetapi, pernyataan seperti itu tentu tidak benar. Alasannya, karena Java dirancang untuk berjalan di atas Java Runtime Environment (JRE) dan mungkin saja eksekusinya ada di atas firewall (untuk applet), sehingga tidak lagi membutuhkan pointer. Java menyediakan suatu mekanisme yang disebut dengan garbage collection, yang berguna untuk melakukan dialokasi memori secara otomatis.