オートボクシングとオートアンボクシング - 萌えJava超入門
第二十章 ラッパークラスで
文字列を数値に変換する


オートボクシングと
オートアンボクシング

プリミティブ型と対応したラッパークラスを自動変換する機能です。


Integer oi = 123;

目次

1.オートボクシング


オートボクシング(Autoboxing)は、
ラッパークラスのインスタンス生成を省略して記述できる仕組みです。
実際にはコンパイラが自動的に読みかえています。

//Sample20_02.java
class Sample20_02{

    public static void main(String[] args){
      int i = 123;
      Integer oi = i; //オートボクシング
      System.out.println(oi.intValue());

    }
}

コマンドライン
ws>javac Sample20_02.java
ws>java Sample20_02
123


プリミティブ型の値を
ラッパークラスに代入するだけね。
おお!
超便利じゃないっすか!


2.オートアンボクシング


オートアンボクシング(AutoUnboxing)は、
ラッパークラスの xxxValueメソッドを省略して記述できる仕組みです。
こちらも、実際にはコンパイラが自動的に読みかえています。


//Sample20_03.java
class Sample20_03{

    public static void main(String[] args){
      Integer oi = 456; //オートボクシング
      int i = oi; //オートアンボクシング
      System.out.println(i);

    }
}

コマンドライン
ws>javac Sample20_03.java
ws>java Sample20_03
456


前のページのサンプルと比べると。
かなり楽になりましたね!
これなら使う気に
なるわ。



だろ?


3.応用

普通に計算もできちゃいます。
//Sample20_05.java
class Sample20_05{

    public static void main(String[] args){
      Integer oi = 1024;
      Double od = 1.5;
      oi++;
      double ans = oi * od;
      System.out.println("answer " + ans);
    }
}

コマンドライン
ws>javac Sample20_05.java
ws>java Sample20_05
answer 1537.5


これはほとんどプリミティブ型と
同じように使えるっすね。
プリミティブ型をやめて
全部ラッパークラスで
書くのはナシ?
ナシだ!
インスタンスの生成で
いちいちヒープ領域に展開してたら
パフォーマンスが落ちるし、
美しくないだろ!!
美しくないって。


4.ラッパークラスとStringクラスの類似点


余談ですが、ラッパークラスは Stringクラスに非常によく似ています。
Stringクラスは
char配列のラッパークラス

と言われることもあるくらいだ。
ラッパークラスとStringクラスの類似点
ラッパークラスStringクラス
 対応するプリミティブ型の
 インスタンス変数「value」に
 値を保持する
 char配列のインスタンス変数「value」
 に値を保持する
 valueの値を変更できない valueの値を変更できない
 プリミティブ型の値を
 コンパイラがインスタンス化に
 読み替える
 (オートボクシング)
 文字列リテラルを
 コンパイラがインスタンス化に
 読み替える
 xxxValueメソッドで valueの値を返す
 (オートアンボクシングも可)
 toCharArrayメソッドで
 valueの値を複製したchar配列を返す

なるほどねー。


お疲れ様でした。


© 2019 awasekagami