三浦ノート

自分の経験したことを検索可能にしていくブログ.誰かの役に立ってくれれば嬉しいです.

Javaのリテラルまとめ

リテラル

ソースコードに直接記述する値。プリミティブ型では整数、浮動小数点数、真偽、文字の四つ。参照型では文字列nullクラスリテラルがある。

プリミティブ型リテラル

プリミティブ型のリテラルはデフォルトでは以下の型になる。

リテラル プリミティブ型
整数 int
少数 double
真偽 boolean
文字 char

整数リテラルがlong型であることを指定する時は、接尾にlまたはLをつける。例 432L

少数リテラルがfloat型であることを指定する時は、接尾にfまたはFをつける。例 3.43f

整数リテラルはデフォルトでは10進数であるが、接頭辞をつけることで以下の3つの基数を指定できる。例 0b11001,0761,0x3A9F2

基数 接頭辞
2 0b
8 0
16 0x

クラスリテラルClass<T>クラス

型名.classClass<型名>というクラスのインスタンスへの参照となる。これはリテラルであり、classというフィールドは無いので注意(classは予約語なので識別子に使えないことからも分かる)。

Class<T>クラスについて詳しくはドキュメントを参照のこと。特徴的なのはpublicコンストラクタが存在せず、T型のロード時にJVMによって自動でインスタンス化されることである。

このクラスはObject.getClass()の戻り値として一番よく見るのではないかと思われる。

実行例

package test;

public class Literals {
    public static void main(String[] args) {
        System.out.println(A.class); // class test.A
        System.out.println(B.class); // class test.B
        System.out.println(IF.class); // interface test.IF
        System.out.println(Imple.class); // class test.Imple
        System.out.println(new A().getClass() == A.class); // true

        // 型判定について、instanceof との比較
        B objB = new B();
        System.out.println(objB instanceof B); // true
        System.out.println(objB instanceof A); // true
        System.out.println(objB.getClass() == B.class); // true
//        System.out.println(objB.getClass() == A.class); // エラー

        A objBA = objB; // アップキャストする
        System.out.println(objBA instanceof B); // true
        System.out.println(objBA instanceof A); // true
        System.out.println(objBA.getClass() == B.class); // true
        System.out.println(objBA.getClass() == A.class); // false

        Imple objI = new Imple();
        System.out.println(objI instanceof Imple); // true
        System.out.println(objI instanceof IF); // true
        System.out.println(objI.getClass() == Imple.class); // true
//        System.out.println(objI.getClass() == IF.class); // エラー

        IF objIF = objI; // アップキャストする
        System.out.println(objIF instanceof Imple); // true
        System.out.println(objIF instanceof IF); // true
        System.out.println(objIF.getClass() == Imple.class); // true
        System.out.println(objIF.getClass() == IF.class); // false
    }
}

class A { }
class B extends A { }

interface IF {}
class Imple implements IF {}