TIPE DATA PRIMITIVE, LITERALS & VARIABLE

 

 

 

 

1. TIPE DATA PRIMITIVE

·         Tipe data primitive di java [4] :

 

·         Tipe data primitive adalah salah satu dari 8 tipe berikut : byte, short, int, long, float, double, char, dan boolean [2].

·         Berikut ini adalah hubungan antara tipe data, lebar tipe data, nilai maksimal & minimal, dan sign dari tipe data tersebut [4] :

Data Type

Width (bits)

Minimum Value, Maximum Value

Signed ?

byte

8

-27, 27-1

Ya

short

16

-215, 215-1

Ya

int

32

-231, 231-1

Ya

long

64

-263, 263-1

Ya

float

32

±1.40129846432481707e-45f, ±3.402823476638528860e+38f

Ya

double

64

\'b14.94065645841246544e-324, \'b11.79769313486231570e+308

Ya

boolean

not applicable

true, false (no ordering implied)

 

char

16

0x0, 0xffff

Tidak

 

·         Untuk tipe data integral, urutan dari yang paling kecil ke paling besar adalah sbb :

byte, short, int, long.

·         Untuk tipe number (byte, short, int, long, float, dan double) adalah bertanda (dapat merepresentasikan nilai positive dan negative). Bit paling kiri merepresentasikan tanda (1 untuk negative, dan 0 untuk positive). Bit kedua dari paling kiri dan seterusnya merepresentasikan nilai (dengan two’s complement notation) [2].

·         Untuk tipe data byte, short, int dan long, jumlah nilai positive adalah jumlah nilai negative dikurangi 1 [2].

·         Sebenarnya tipe data char adalah tipe integral, oleh karena itu tipe data ini dapat diisi dengan tipe numeric dengan nilai 0 sampai dengan 65535 [2].

Contoh [1] :

Program xx

 

public class Coba {

    public static void main(String[] args) {

        char c = 68;

        System.out.println("c = " + c);

    }

}

 

Program di atas akan menghasilkan :

c = D

 

2. LITERAL

·         Literal adalah suatu nilai yang kita tuliskan di dalam kode program [1].

·         Ada beberapa jenis literal, diantaranya yaitu : integer literal, floating-point literal, boolean literal, character literal, dan String literal [1].

2.1. Integer literal

·         Literal integer adalah suatu cara untuk merepresentasikan nilai integer di dalam kode program [1&2].

·         Literal integer dapat (direpresentasikan) dituliskan dengan 3 cara, yaitu :

1.      Decimal literal

2.      Octal literal

3.      Hexadecimal literal

·         Literal integer selalu merepresentasikan tipe data int. Literal integer dapat dirubah menjadi merepresentasikan tipe data long dengan menambang suffix l atau L [2].

Contoh [1]:

Program 01

 

public class LongLiteral1

{

      public static void main(String[] args)

      {

            /*

             * Bila tanpa suffix L, maka statement dibawah

             * akan error, sebab dianggap literal int, padahal

             * literal int tidak dapat mencapai nilai

             * 1234567890.

             */

            long nilai = 12345678901L;

            System.out.println("nilai = " + nilai);

      }

}

 

Program di atas akan menghasilkan :

nilai = 12345678901

 

2.1.1 Decimal literal

·         Decimal literal adalah merepresentasikan nilai integer dengan basis 10 [1].

·         Decimal literal direpresentasikan dengan tanpa prefix maupun suffix [1].

·         Simbol-simbol (angka-angka) yang dipakai untuk merepresentasikan adalah : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9[1].

·         Bila dibutuhkan, suffix l atau L dapat diberikan untuk menyatakan tipe data long [1].

·         Contoh [1]:

int i = 123;

System.out.println(45678);

2.1.2 Hexadecimal literal

·         Hexadecimal literal adalah merepresentasikan nilai integer dengan basis 16 [2].

·         Hexadecimal literal direpresentasikan dengan prefix 0x ataupun 0X [2].

·         Simbol-simbol (angka-angka) yang dipakai untuk merepresentasikan adalah : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f [2].

·         Symbol a, b, c, d, e, f pada literal adalah tidak case cansitive (symbol a sama dengan symbol A, dan sebagainya) [2].

·         Hexadecimal literal dapat memiliki sampai dengan 16 digit (tidak termasuk prefix dan suffix) [2]

·         Bila dibutuhkan, suffix l atau L dapat diberikan untuk menyatakan tipe data long [1].

·         Contoh [1]:

Program 02

 

public class HexadecimalLiteral1

{

      public static void main(String[] args)

      {

            byte b = 0xf;

            System.out.println("b = " + b);

      }

}

 

Program di atas akan menghasilkan :

b = 15

 

2.1.3 Octal literal

·         Octal literal adalah merepresentasikan nilai integer dengan basis 8 [1].

·         Octal literal direpresentasikan dengan prefix 0 (nol) [1].

·         Simbol-simbol (angka-angka) yang dipakai untuk merepresentasikan adalah : 0, 1, 2, 3, 4, 5, 6, 7 [1].

·         Octal literal dapat memiliki sampai dengan 21 digit (tidak termasuk prefix 0) [2]

·         Bila dibutuhkan, suffix l atau L dapat diberikan untuk menyatakan tipe data long [1].

·         Contoh [1]:

Program 03

 

public class OctalLiteral1

{

      public static void main(String[] args)

      {

            byte b = 0123;

            System.out.println("b = " + b);

      }

}

 

Program di atas akan menghasilkan :

b = 83

 

2.2. Character literal

·         Character literal direpresentasikan dengan bentuk-bentuk sbb [1]:

1.      Karakter dalam tanda petik tunggak (Ex : ’a’)

2.      Escape character (Ex : ’\n’)

3.      Unicode notation dengan prefix \u  (Ex : ’\u0123’)

Contoh [1] :

Program 04

 

public class CharacterLiteral1

{

 

      public static void main(String[] args)

      {

            char c1 = 'a';

            char c2 = '\\';

            char c3 = '\u0061';

     

            System.out.println("c1 = " + c1);

            System.out.println("c2 = " + c2);

            System.out.println("c3 = " + c3);

      }

}

 

Program di atas akan menghasilkan :

c1 = a

c2 = \

c3 = a

 

·         Literal character selain dapat diassign pada variable dengan tipe data char, dapat pula diassignkan ke tipe data lain (byte, short, int, long, float, double) [1].

Contoh [1] :

Program 05

 

public class CharacterLiteral2

{

      public static void main(String[] args)

      {

            byte b = 'a';

            short s = 'a';

            int i = 'a';

            long l = 'a';

            float f = 'a';

            double d = 'a';

      }

}

 

 

·         Yang berhubungan dengan literal character adalah tipe data char. Tipe data char adalah sebenarnya adalah 16 bit unsigned integer. Suatu varible dengan tipe data ini selain dapat diassign dengan literal character, dapat pula diassign dengan literal integer [1&2].

Contoh [1] :

Program 06

 

public class CharacterLiteral3

{

      public static void main(String[] args)

      {

            char c1 = 97;

            char c2 = 'a';

           

            System.out.println("c1 = " + c1);

            System.out.println("c2 = " + c2);

      }

}

 

Program di atas akan menghasilkan :

c1 = a

c2 = a

 

2.3. Floating point literal

·         Literal floating-point adalah suatu cara untuk merepresentasikan nilai pecahan di dalam kode program [1&2].

·         Literal floating-point selalu merepresentasikan tipe data double (64 bit). Literal floating-point dapat dirubah menjadi merepresentasikan tipe data float (32 bit) dengan menambang suffix f atau F [2].

·         Secara optional, literal floating-point dapat ditambah suffix d atau D untuk menyatakan tipe data double (meski ini tidak perlu, karena tipe data double adalah default dari literal floating-point) [1&2].

Contoh [1] :

Program 07

 

public class FloatingPointLiteral1

{

      public static void main(String[] args)

      {

            float f = 123.456F;

            double d1 = 123.456;

            double d2 = 123.456D;

           

            System.out.println("f = " + f);

            System.out.println("d1 = " + d1);

            System.out.println("d2 = " + d2);

      }

}

 

Program di atas akan menghasilkan :

f = 123.456

d1 = 123.456

d2 = 123.456

 

2.4. Boolean literal

·         Boolean literal merepresentasikan tipe data boolean [2].

·         Boolean literal hanya memiliki 2 literal, yaitu : true atau false [2].

·         Boolean literal tidak dapat diganti dengan literal 0 atau 1 seperti pada bahasa lain [2].

Contoh [1] :

Program 08

 

package literal;

 

public class BooleanLiteral1

{

      public static void main(String[] args)

      {

            boolean bool = 0; //seharusnya: boolean bool = false;

            System.out.println("bool = " + bool);

      }

}

 

Program di atas akan menghasilkan compile time error sbb :

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

      Type mismatch: cannot convert from int to boolean

 

      at literal.BooleanLiteral1.main(BooleanLiteral1.java:7)

 

2.5. String literal

·         Literal string merepresentasikan kode program suatu nilai dari object String [2].

·         Dalam literal string, karakter petik tunggal tidak perlu dijadikan escape character (tidak seperti bahasa C) [1].

Contoh [1] :

Program 09

 

public class StringLiteral1

{

      public static void main(String[] args)

      {

            String s = "Sekarang adalah hari jum'at";

            System.out.println(s);

      }

}

 

Program di atas akan menghasilkan :

Sekarang adalah hari jum'at

 

3. VARIABLE

·         Variabel sebenarnya hanyalah wadah bit dengan suatu tipe [2].

3.1 Variable berdasarkan tipenya

·         Berdasarkan tipenya, variable dibagi menjadi 2, yaitu [1] :

1)      Primitive variable

2)      Object reference variable

·         Sebuah reference variable dapat menunjuk pada suatu object dengan tipe seperti yang dideklarasikan, dan dapat pula menunjuk pada object dengan tipe subtype dari tipe yang dideklarasikan [1&2].

Contoh [1] :

Bila A extends B, dan C extends B. Maka variable yang dideklarasikan dengan tipe A dapat menunjuk pada object bertipe C.

·          

 

3.2 Variable berdasarkan scope

·         Berdasarkan scopenya, variable dibagi menjadi 4, yaitu [2] :

1.      Static variable

2.      Instance variable

3.      Local variable (termasuk parameter method, variable di intial block, variable di constructor)

4.      Block variable

·         Scope variable mempengaruhi lama hidup variable, dan dapat diakses dari mana saja variable tersebut [1].

Scope variable

Lama hidup

Static variable

Sejak kelas di load oleh JVM, sampai kelas di unload JVM.

Instance variable

Sejak instance dibuat sampai instance di hapus.

Local variable

Selama method masih ada di stack.

Block variable

Selama block dieksekusi.

 

·         Kesalahan scope utama dalam mengakses variable adalah mengakses instance variable dari static method (biasanya method main) [2].

 

·         Default value adalah nilai default yang otomatis diberikan oleh java pada saat deklarasi variable [1]. Default value diperngaruhi oleh tipe dan scope variable [2].

Tipe variable

Scope variable

Element Array

(scope tidak berpengaruh)

Static variable

dan

Instance variable

Local variable

dan

Block variable

Primitive variable

byte

0

Tidak terinisialisasi

0

short

0

Tidak terinisialisasi

0

int

0

Tidak terinisialisasi

0

long

0

Tidak terinisialisasi

0

char

\u0000

Tidak terinisialisasi

\u0000

float

0.0f

Tidak terinisialisasi

0.0f

double

0.0

Tidak terinisialisasi

0.0

boolean

false

Tidak terinisialisasi

false

Object reference variable

null

Tidak terinisialisasi

null

 

·         Suatu variable yang tidak terinisialisasi (local / block variable) harus diinisialisasi sebelum digunakan, bila tidak akan muncul compile time error [1&2].

Contoh [1] :

Program 10

 

package variable;

 

public class Uninitialized1

{

      public static void main(String[] args)

      {

            int i; //tidak terinisialisasi

            System.out.println("i = " + i);

      }

}

 

Program di atas akan menghasilkan compile time error sbb :

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

      The local variable i may not have been initialized

 

      at variable.Uninitialized1.main(Uninitialized1.java:8)

 

·         Kita dapat mendeklarasikan local variable / block variable tanpa diinisialisasi, selama variable tersebut tidak digunakan. Variable yang tidak diinisialisasi tadi harus diassign dengan suatu nilai, bila tidak akan timbul compile time error [1&2].

Contoh [1]:

Program 11 (bedakan dengan program 10)

 

package variable;

 

public class Uninitialized4

{

      public static void main(String[] args)

      {

            int i; //tidak terinisialisasi

i = 10; //variable diassign dengan suatu nilai

            System.out.println("i = " + i);

      }

}

 

Program di atas akan menghasilkan :

i = 10

 

Assign suatu variable yang tidak terinisialisasi tidak boleh di dalam suatu percabangan yang tidak tentu terjadi. [1&2].

Contoh [1]:

Program 12a (bedakan dengan program 11)

 

package variable;

 

 

public class Uninitialized5

{

       public static void main(String[] args)

       {

              int i; //tidak terinisialisasi

              boolean maybe = true;

             

              if(maybe)

              {

                     i = 10; //variable diassign dengan suatu nilai

              }

             

              System.out.println("i = " + i);

       }

}

 

Program di atas akan menghasilkan compile time error sbb:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

      The local variable i may not have been initialized

 

      at variable.Uninitialized5.main(Uninitialized5.java:15)

 

Assign suatu variable yang tidak terinisialisasi boleh di dalam suatu percabangan yang pasti terjadi. [2].

Program 12b (bedakan dengan program 12a)

 

package variable;

 

public class Uninitialized6

{

      public static void main(String[] args)

      {

            int i; //tidak terinisialisasi

           

            //Pasti terjadi

            if(true)

            {

                  i = 10; //variable diassign dengan suatu nilai

            }

           

            System.out.println("i = " + i);

      }

}

 

Program di atas akan menghasilkan :

i = 10

 

·         Pada object reference variable, nilai null tidak sama dengan tidak terinisialisasi [1].

Contoh [1] :

Program 13

 

package variable;

 

public class Uninitialized2

{

      public static void main(String[] args)

      {

            Object o; //Tidak terinisialisasi

           

            if(o == null)

            {

                  System.out.println("o is null");

            }

      }

}

 

Program di atas akan menghasilkan compile time error sbb :

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

      The local variable o may not have been initialized

 

      at variable.Uninitialized2.main(Uninitialized2.java:9)

 

·         Semua elemen array akan diinisialisasi dengan nilai default, tidak peduli apakah array tersebut dideklarasikan sebagai class variable / instance variable / local variable / block variable [1].

Contoh :

Program 14

 

public class Uninitialized3

{

      static int[] varSatu = new int[3]; //class variable

     

      public static void main(String[] args)

      {

            int[] varDua = new int[3]; //local variable

           

            System.out.println("varSatu[0] = " + varSatu[0]);

            System.out.println("varDua[0] = " + varDua[0]);

      }

}

 

Program di atas akan menghasilkan :

varSatu[0] = 0

varDua[0] = 0

 

·         Local dan block variable hanya dapat bermodifier final (tidak dapat bermodifier public, protected, private, static, strictfp, dsb) [2]

Contoh [1] :

Program 15

 

package literal;

 

public class LocalVariable1

{

      public static void main(String[] args)

      {

            public int i; //ERROR

      }

}

 

Program di atas akan menghasilkan compile time error sbb :

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

      Illegal modifier for parameter i; only final is permitted

 

      at literal.LocalVariable1.main(LocalVariable1.java:7)

 

3.3 Variable berdasarkan jenisnya

·         Berdasarkan jenisnya, variable dibedakan menjadi 7, yaitu [3]:

1)      static variable

2)      instance variable (field / property / attribute)

3)      Local variable

4)      Komponen array

5)      Parameter method

6)      Parameter constructor

7)      Parameter exception-handler

·         Syntak pendeklarasian variable static, variable instance dan variable local adalah sebagai berikut [1]:

TipeVar namaVar1 [= nilaiVar1] [, namaVar2 [= nilaiVar2] [,...]];

            Contoh [1] :

                        int i = 10, j = 100, k;

·         Instance variable (field) adalah variable yang dideklarasikan dalam suatu kelas, akan tetapi diluar method, dan tanpa modifier static (bila diberi modifier static akan menjadi static variable) [1&2].

·         Local variable adalah variable yang dideklarasikan di dalam sebuah method [2].

·         Nama local variable boleh sama dengan nama instance variable, hal ini disebut dengan shadowing. Dalam hal ini kita tidak dapat menggunakan instance variable tersebut, kecuali kita memberi keyword this diikuti titik diikuti nama instance variable untuk mengakses instance variable yang dishadowing tadi [1&2].

Contoh [1] :

Program xx

 

public class A {

    String s = "Halo";

   

    public static void main(String[] args) {

        A a = new A();

        a.print();

    }

   

    void print() {

        //shadowing

        String s = "Apa kabar";

        System.out.println("Instance var = " + this.s);

        System.out.println("Local var    = " + s);

    }

}

 

Program di atas akan menghasilkan :

Instance var = Halo

Local var    = Apa kabar

 

3.4 final Variable

·         Suatu variable dengan modifier final pasti tidak dapat diassign dengan nilai baru (setelah variable tersebut diinisialisasi dengan suatu nilai) [1]

Contoh [1] :

Program xx

 

public class A {

    final String s = "coba";

   

    public static void main(String[] args) {

        A a = new A();

        a.s = "rubah";

        System.out.println(a.s);

    }

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\A.java:6: cannot assign a value to final variable s

        a.s = "rubah";

1 error

 

·         Tidak semua jenis variable dapat menggunakan modifier final. Jenis variable yang dapat menggunakan modifier final adalah [1]:

1.      static variable

2.      Instance variable

3.      Local variable

4.      Parameter constructor

5.      Parameter method

6.      Parameter exception-handler (useless ???)

Contoh [1] :

Program xx

 

public class A {

    static final String a = "coba"; //static var

    final String b = "coba"; //instance var

   

    //parameter constructor

    A(final String c) {}

   

    //parameter method

    void myMethod(final String d) {

        final String f = "coba"; //Local var

       

        try {}

        //Parameter exception handler

        catch(final Exception e) {}

    }

}

 

 

·         Khusus variable berjenis komponen array tidak dapat diber modifier final (karena memang tidak ada mekanisme untuk itu). Akan tetapi, variable reference yang menunjuk suatu object array (bukan komponen array) dapat diberi modifier final [1].

Program xx

 

public class A {

    final static String[] myStringArray = new String[3];

   

    public static void main(String[] args) {

        myStringArray[0] = "Halo ";

        myStringArray[1] = "apa ";

        myStringArray[2] = "kabar ?";

        for(int i = 0; i < myStringArray.length; i++) {

            System.out.print(myStringArray[i]);

        }

    }

}

 

Program di atas akan menghasilkan :

Halo apa kabar ?

 

 

·         Suatu reference variable dengan modifier final, maka variable tersebut tidak dapat diassign dengan object baru, akan tetapi kita dapat merubah nilai-nilai(data) yang terletak pada object yang direference tersebut [1&2].

Program xx

 

public class A {

    final static B b = new B();

    public static void main(String[] args) {

        b.s = "palsu";

        System.out.println(b.s);

    }

}

 

class B {

    String s = "asli";

}

 

Program di atas akan menghasilkan :

palsu

 

 

3.4.1 final pada instance variable

·         Bila suatu instance variable diberi modifier final, maka variable tersebut [1]:

1.      Variable tersebut tidak dapat diinisialisasi secara otomatis dengan nilai default variable.

Contoh [1] :

Program xx

 

class A {

    final String s;

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\Coba.java:28: variable s might not have been initialized

class A {

1 error

 

2.      Variable tersebut harus diinisialisasi secara manual oleh programmer di salah satu (tidak dapat lebih dari 1)  tempat berikut :

a.       Dalam deklarasi final variable tersebut.

Contoh [1] :

Program xx

 

public class A {

    final String s = "coba";

   

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.s);

    }

}

 

Program di atas akan menghasilkan :

coba

 

b.      Dalam instance initializer block.

Contoh [1] :

Program xx

 

public class A {

    final String s;

   

    {

        s = "coba";

    }

   

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.s);

    }

}

 

Program di atas akan menghasilkan :

coba

 

c.       Dalam constructor

Contoh [1] :

Program xx

 

public class A {

    final String s;

   

    A() {

        s = "coba";

    }

   

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.s);

    }

}

 

Program di atas akan menghasilkan :

coba

 

 

3.4.2 final pada static variable

·         Bila suatu static variable diberi modifier final, maka variable tersebut [1]:

1.      Variable tersebut tidak dapat diinisialisasi secara otomatis dengan nilai default variable.

Contoh [1] :

Program xx

 

class A {

    static final String s;

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\A.java:1: variable s might not have been initialized

public class A {

1 error

 

2.      Variable tersebut harus diinisialisasi secara manual oleh programmer di salah satu (tidak dapat lebih dari 1)  tempat berikut :

a.       Dalam deklarasi final variable tersebut.

Contoh [1] :

Program xx

 

public class A {

    static final String s = "coba";

   

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.s);

    }

}

 

Program di atas akan menghasilkan :

coba

 

b.      Dalam static initializer block.

Contoh [1] :

Program xx

 

public class A {

    static final String s;

    

    static {

        s = "coba";

    }

   

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.s);

    }

}

 

Program di atas akan menghasilkan :

coba

 

3.4.3 final pada parameter constructor, parameter method dan parameter exception handler

·         Bila suatu parameter diberi modifier final, maka nilai parameter tersebut tidak akan dapat dirubah. Parameter tersebut hanya akan dapat berisi nilai yang sesuai dengan nilai yang dimasukkan saat pemanggilan constructor atau pemanggilan method atau exception yang terlempar [2]

Contoh [1] :

Program xx

 

public class A {

    public static void main(String[] args) {

        A a = new A();

        a.print("Percobaan");

    }

   

    void print(final String s) {

        //shadowing

        s = "Apa kabar";

        System.out.println("Nilai s = " + s);

    }

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\A.java:9: final parameter s may not be assigned

        s = "Apa kabar";

1 error

 


[1] M. Desdrianton Islamy.

[2] Sun Certified Programmer for Java 5 Study Guide, by Katherine Sierra and Bert Bates.

[1&2] Dari [2] kemudian dirubah oleh [1]

[3] The Java™ Language Specification, Third Edition, By James Gosling, Bill Joy, Guy Steele, Gilad Bracha.

[4] Programmer's Guide to Java™ Certification, A: A Comprehensive Primer, Second Edition By Khalid A. Mughal, Rolf W. Rasmussen

 

 

Document versi 1 : Jumat, 22 Desember 2006

Document versi 2 : Selasa, 26 Desember 2006

Document versi 3 : Minggu, 4 Maret 2007

Document versi 4 : Sabtu, 23 Juni 2007