0Pricing
Java Academy · Pelajaran

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.0

Konversi 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); // d

Pemotongan 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));   // -4

Konversi 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));   // ff

Promosi dalam Ekspresi

Dalam ekspresi aritmetika, Java secara otomatis mempromosikan operand:

  • byte, short, char → dipromosikan menjadi int sebelum operasi
  • Jika salah satu operand adalah long, hasilnya adalah long
  • Jika salah satunya adalah float atau double, 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.0

Operator 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); // 2000

Praktik: 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")); // IllegalArgumentException

Pemeriksaan 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
  • char melebar menjadi int; int dapat dipersempit kembali menjadi char dengan konversi eksplisit
  • Konversi bilangan pecahan ke int memotong 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

  1. Tipe Primitif vs Tipe Referensi
  2. Konversi Pelebaran dan Penyempitan
  3. Operator instanceof
  4. Casting Tipe dalam Praktik
← Kembali ke Java Academy