Konversi Pelebaran dan Penyempitan
Pelajari konversi pelebaran otomatis dan cara melakukan casting penyempitan secara eksplisit dengan aman.
Konversi Pelebaran dan Penyempitan adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Konversi Tipe di Java
Java memungkinkan konversi nilai di antara tipe yang kompatibel. Ada dua arah:
- Pelebaran—mengonversi ke tipe yang lebih besar (aman, otomatis)
- Penyempitan—mengonversi ke tipe yang lebih kecil (berisiko, memerlukan konversi eksplisit)
Konversi Pelebaran
Pelebaran terjadi secara otomatis saat Anda menetapkan nilai ke tipe kompatibel yang lebih besar. Tidak ada data yang hilang karena tipe tujuan dapat mewakili semua nilai dari sumber.
Urutan pelebaran: byte → short → int → long → float → double
byte b = 42;
short s = b; // byte → short (widening)
int i = s; // short → int (widening)
long l = i; // int → long (widening)
float f = l; // long → float (widening)
double d = f; // float → double (widening)
System.out.println(d); // 42.0Konversi Penyempitan
Penyempitan harus dilakukan secara eksplisit dengan operator konversi tipe (type). Nilai dapat terpotong atau rusak jika tidak sesuai dengan tipe tujuan.
double price = 99.99;
int wholePart = (int) price; // narrows — decimal truncated
System.out.println(wholePart); // 99 (not rounded!)
long bigNum = 130L;
byte small = (byte) bigNum; // 130 overflows byte (max 127)
System.out.println(small); // -126 (unexpected!)Luapan Saat Penyempitan
Saat terjadi luapan nilai selama penyempitan, Java memutarnya menggunakan aritmetika modular—tidak ada pengecualian yang dilemparkan. Anda harus mencegahnya secara manual.
int million = 1_000_000;
byte narrowed = (byte) million;
System.out.println(narrowed); // 64 (wraps around)
// Safe narrowing: check bounds first
if (million >= Byte.MIN_VALUE && million <= Byte.MAX_VALUE) {
byte safe = (byte) million;
} else {
System.out.println("Value doesn't fit in byte!");
}Konversi char dan int
char adalah bilangan bulat tak bertanda 16-bit yang mewakili titik kode Unicode. Tipe ini secara otomatis melebar menjadi int, tetapi harus dikonversi secara eksplisit dari int kembali ke char.
char letter = 'A';
int code = letter; // widening: char → int
System.out.println(code); // 65
int nextCode = code + 1;
char nextLetter = (char) nextCode; // narrowing: int → char
System.out.println(nextLetter); // B
// Useful for Caesar cipher shifts
char shifted = (char) ('a' + 3);
System.out.println(shifted); // dPemotongan Bilangan Titik Mengambang ke Bilangan Bulat
Mengonversi bilangan titik mengambang ke bilangan bulat dengan cast akan memotong ke arah nol—bukan membulatkan. Gunakan Math.round() jika Anda memerlukan pembulatan.
double pos = 3.9;
double neg = -3.9;
System.out.println((int) pos); // 3 (not 4)
System.out.println((int) neg); // -3 (not -4)
System.out.println(Math.round(pos)); // 4
System.out.println(Math.round(neg)); // -4Konversi String ke Angka
Parsing String menjadi angka menggunakan metode pembungkus, bukan konversi tipe. Jika diberikan String yang bukan angka, NumberFormatException akan dilempar.
String input = "42";
int parsed = Integer.parseInt(input);
double parsedD = Double.parseDouble("3.14");
System.out.println(parsed + 1); // 43
System.out.println(parsedD); // 3.14
try {
int bad = Integer.parseInt("abc");
} catch (NumberFormatException e) {
System.out.println("Not a valid number!");
}Konversi Angka ke String
Konversi angka menjadi String dapat dilakukan dengan String.valueOf(), Integer.toString(), atau penggabungan String dengan "".
int score = 95;
String s1 = String.valueOf(score); // "95"
String s2 = Integer.toString(score); // "95"
String s3 = score + ""; // "95" (concat trick)
System.out.println(s1.getClass().getSimpleName()); // String
// Converting to different bases
System.out.println(Integer.toBinaryString(42)); // 101010
System.out.println(Integer.toHexString(255)); // ffPromosi dalam Ekspresi
Dalam ekspresi aritmetika, Java secara otomatis mempromosikan operand:
byte,short,char→ dipromosikan menjadiintsebelum operasi- Jika salah satu operand adalah
long, hasilnya adalahlong - Jika salah satunya adalah
floatataudouble, hasilnya menggunakan tipe yang lebih lebar
byte x = 10;
byte y = 20;
// byte z = x + y; // compile error! sum is promoted to int
int z = x + y; // correct
long a = 100L;
float b = 2.5f;
double result = a * b; // long * float → double
System.out.println(result); // 250.0Operator Penugasan Gabungan
Operator gabungan seperti +=, -=, dan *= menyertakan konversi implisit ke tipe yang lebih sempit. Dengan demikian, Anda dapat menulis kode ringkas menggunakan variabel byte dan short.
byte count = 100;
// count = count + 1; // compile error — int result needs cast
count += 1; // OK — compound op casts automatically
System.out.println(count); // 101
short total = 1000;
total *= 2; // implicit narrow cast included
System.out.println(total); // 2000Praktik: Parsing Bilangan Bulat yang Aman
Pola yang digunakan dalam situasi nyata: parsing input pengguna dengan aman, memvalidasi rentang, lalu mengonversinya ke tipe yang benar-benar diperlukan.
public static byte parseAsByte(String input) {
int value = Integer.parseInt(input); // can throw NumberFormatException
if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
throw new IllegalArgumentException(
"Value " + value + " out of byte range");
}
return (byte) value;
}
// Usage
System.out.println(parseAsByte("100")); // 100
System.out.println(parseAsByte("200")); // IllegalArgumentExceptionPemeriksaan Cepat
Apa keluaran kode berikut?
double d = -7.8; int i = (int) d; System.out.println(i);
Ringkasan: Pelebaran dan Penyempitan
Inti pembelajaran:
- Pelebaran berlangsung otomatis dan aman: byte→short→int→long→float→double
- Penyempitan memerlukan konversi eksplisit dan dapat menyebabkan kehilangan data atau luapan
charmelebar menjadiint;intdapat dipersempit kembali menjadichardengan konversi eksplisit- Konversi bilangan pecahan ke
intmemotong nilai menuju nol, bukan membulatkannya - Gunakan Integer.parseInt/Double.parseDouble untuk mengonversi String menjadi angka
- Operator gabungan (+=, *=) menyertakan konversi implisit ke tipe yang lebih sempit
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Konversi Pelebaran dan Penyempitan” gratis?
Ya — teks lengkap “Konversi Pelebaran dan Penyempitan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Konversi Pelebaran dan Penyempitan”?
Pelajari konversi pelebaran otomatis dan cara melakukan casting penyempitan secara eksplisit dengan aman. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Konversi Pelebaran dan Penyempitan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tipe Primitif vs Tipe Referensi
- Konversi Pelebaran dan Penyempitan
- Operator instanceof
- Casting Tipe dalam Praktik