Setelah dua chapter membaca input, kini kita berbalik ke arah yang lebih sering kita pakai: menampilkan hasil. Hampir setiap program Java kecil berkomunikasi lewat terminal, dan seluruh komunikasi tersebut mengalir melalui satu pintu bernama System.out. Chapter ini membahas perbedaan print dan println, escape sequence yang membuat satu baris teks dapat memuat tab, tanda kutip, hingga karakter Unicode, serta cara merapikan output sederhana — bekal yang dibutuhkan sebelum melangkah ke materi pemformatan pada chapter berikutnya.

System.out sebagai PrintStream #

System.out adalah field statis di class System yang bertipe java.io.PrintStream — sebuah stream keluaran siap pakai yang terhubung ke terminal. Dari object inilah kita memanggil method print() dan println(), masing-masing dengan banyak overload: versi untuk String, int, double, char, boolean, hingga Object umum. Versi Object memanggil String.valueOf() sehingga hasil toString() object tercetak otomatis; itulah sebabnya angka dan object dapat langsung dilempar ke println tanpa konversi manual.

Dua perilaku PrintStream layak dicatat. Pertama, method keluaran ini tidak melempar IOException — kegagalan penulisan ditelan dan hanya bisa diperiksa lewat checkError(), sehingga kode cetak kita tidak perlu blok try-catch. Kedua, Java menyediakan System.err sebagai stream kedua yang diperuntukkan bagi pesan galat; keduanya berujung ke terminal, tetapi System.err tidak disangga sehingga pesan galat muncul sesegera mungkin.

Perbedaan kedua method utama ini sederhana namun mendasar: print() menulis teks lalu berhenti di posisi yang sama, sedangkan println() menambahkan tanda baris baru setelah teks. Program kecil berikut memperlihatkan keduanya secara berdampingan:

public class PrintVsPrintln {
    public static void main(String[] args) {
        System.out.print("Halo, ");
        System.out.print("Budi");
        System.out.println("!");

        System.out.println("Baris baru dimulai dari sini.");
        System.out.println();
        System.out.println("println() tanpa argumen menghasilkan baris kosong.");
    }
}

Output yang Dihasilkan:

text
Halo, Budi!
Baris baru dimulai dari sini.

println() tanpa argumen menghasilkan baris kosong.

Tiga panggilan print dan println pada baris 3-5 menghasilkan satu baris utuh "Halo, Budi!" karena tidak ada satu pun yang memindahkan posisi cetak sebelum println("!") menutupnya. Baris 8 memperlihatkan bentuk khusus println() tanpa argumen: method tersebut hanya mencetak tanda baris baru, praktis untuk menyisipkan baris kosong pemisah.

Escape Sequence dalam String #

String di Java dibatasi tanda kutip ganda, sehingga pertanyaan muncul: bagaimana mencetak tanda kutip itu sendiri, atau memindah baris di tengah string? Jawabannya adalah escape sequence — kombinasi backslash dan satu karakter yang compiler terjemahkan menjadi karakter khusus saat mengompilasi string:

UrutanArtiHasil di layar
\nline feedpindah ke baris baru
\ttablompat ke kolom tab berikutnya
\rcarriage returnkursor kembali ke awal baris
\\backslashsatu karakter \
\"tanda kutip gandasatu karakter "
\'tanda kutip tunggalsatu karakter '
\uXXXXescape Unicodekarakter sesuai kode heksadesimal

Program berikut menguji urutan yang paling sering dipakai:

public class EscapeSequence {
    public static void main(String[] args) {
        System.out.println("Baris pertama\nbaris kedua");
        System.out.println("Nama\tUmur\tKota");
        System.out.println("Budi\t17\tBandung");
        System.out.println("Path Java: C:\\tools\\jdk");
        System.out.println("Kata \"Java\" berada di dalam tanda kutip");
        System.out.println("Huruf dari escape unicode: \u0041\u0042\u0043");
    }
}

Output yang Dihasilkan:

text
Baris pertama
baris kedua
Nama	Umur	Kota
Budi	17	Bandung
Path Java: C:\tools\jdk
Kata "Java" berada di dalam tanda kutip
Huruf dari escape unicode: ABC

Mari kita telaah tiap barisnya:

  1. Baris 3 (\n): satu string terbelah menjadi dua baris output — tanda baris baru disisipkan tepat di posisi \n.
  2. Baris 4-5 (\t): tab melompat ke kolom tab berikutnya; karena panjang teks “Nama” dan “Budi” sama-sama di bawah lebar satu kolom tab, kedua baris tampak sejajar.
  3. Baris 6 (urutan \\): backslash harus ditulis ganda agar tidak dianggap awal escape sequence, sehingga path Windows C:\tools\jdk di layar membutuhkan penulisan C:\\tools\\jdk di dalam string.
  4. Baris 7 (\"): tanda kutip ganda dapat hadir di dalam string tanpa menutup string itu sendiri.
  5. Baris 8 (\u0041 dst.): kode heksadesimal 41, 42, 43 dipetakan menjadi huruf A, B, C.

Merapikan Output Sederhana dengan Tab #

Gabungan print, println, dan \t sudah cukup untuk struk belanja sederhana. Program berikut juga memperlihatkan bahwa println menerima hasil ekspresi aritmetika — nilainya dihitung lebih dulu, lalu dikonversi menjadi teks:

public class TabelBelanja {
    public static void main(String[] args) {
        System.out.println("Item\tQty\tHarga");
        System.out.println("Buku\t2\t15000");
        System.out.println("Pena\t5\t3000");
        System.out.println("Penggaris\t1\t7500");
        System.out.println("-------------------------");
        System.out.print("Total: ");
        System.out.println(2 * 15000 + 5 * 3000 + 7500);
    }
}

Output yang Dihasilkan:

text
Item	Qty	Harga
Buku	2	15000
Pena	5	3000
Penggaris	1	7500
-------------------------
Total: 52500

Kolom “Harga” pada baris “Penggaris” tidak sejajar dengan baris lainnya karena nama item tersebut lebih panjang dari lebar satu kolom tab — tab hanya melompat antar penanda kolom tetap, bukan menghitung lebar teks. Ketika ketidaksejajaran seperti ini mulai mengganggu, kita butuh alat yang lebih presisi: pemformatan dengan lebar kolom dan presisi desimal. Chapter berikutnya, String Formatting, memperkenalkan String.format sebagai fondasinya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

EscapeSequence.java

Unduh berkas
java
public class EscapeSequence {
    public static void main(String[] args) {
        System.out.println("Baris pertama\nbaris kedua");
        System.out.println("Nama\tUmur\tKota");
        System.out.println("Budi\t17\tBandung");
        System.out.println("Path Java: C:\\tools\\jdk");
        System.out.println("Kata \"Java\" berada di dalam tanda kutip");
        System.out.println("Huruf dari escape unicode: \u0041\u0042\u0043");
    }
}

PrintVsPrintln.java

Unduh berkas
java
public class PrintVsPrintln {
    public static void main(String[] args) {
        System.out.print("Halo, ");
        System.out.print("Budi");
        System.out.println("!");

        System.out.println("Baris baru dimulai dari sini.");
        System.out.println();
        System.out.println("println() tanpa argumen menghasilkan baris kosong.");
    }
}

TabelBelanja.java

Unduh berkas
java
public class TabelBelanja {
    public static void main(String[] args) {
        System.out.println("Item\tQty\tHarga");
        System.out.println("Buku\t2\t15000");
        System.out.println("Pena\t5\t3000");
        System.out.println("Penggaris\t1\t7500");
        System.out.println("-------------------------");
        System.out.print("Total: ");
        System.out.println(2 * 15000 + 5 * 3000 + 7500);
    }
}