【Java文法】ラッパークラス

こんにちは、コイキングです。

本記事では'ラッパークラス'について、説明したいと思います。


******

# 1. ラッパー(Wrapper)クラスとは？
ラッパークラスはプリミティブデータ型をクラス化したもので、
**1) プリミティブ型の変数をインスタンスとして使う場合**
**2) 文字列 <-> 数字を相互変換する必要がある場合**
などに使います。

# 2. プリミティブ型からラッパークラスのインスタンスに変換
- プリミティブ型 -> **ラッパークラスの変換はnew 演算子**を使います。

```
// ※ Wrapperクラスの参照変数には'null'の代入ができます。
Integer wrapperInt = null;
Long wrapperLong = null;
Short wrapperShort = null;
Byte wrapperByte = null;
Double wrapperDouble = null;
Float wrapperFloat = null;
Character wrapperChar = null;
Boolean wrapperBoolean = null;

// new 演算子を使いプリミティブ型のリテラル値からラッパークラスのインスタンスに変換
wrapperInt = new Integer(100);
wrapperLong = new Long(2000000L);
wrapperShort = new Short((short) 10);
wrapperByte = new Byte((byte) 1);
wrapperDouble = new Double(2.85);
wrapperFloat = new Float(0.25f);
wrapperChar = new Character('c');
wrapperBoolean = new Boolean(false);

System.out.println("int -> Int : " + wrapperInt);
System.out.println("long -> Long : " + wrapperLong);
System.out.println("short -> Short : " + wrapperShort);
System.out.println("byte -> Byte : " + wrapperByte);
System.out.println("double -> Double : " + wrapperDouble);
System.out.println("float -> Float : " + wrapperFloat);
System.out.println("char -> Character : " + wrapperChar);
System.out.println("boolean -> Boolean : " + wrapperBoolean);
```

- new 演算子を使わず、直接値を代入する方式でも変換できます。
こちらの機能を**オートボクシング(Auto Boxing)**と言います。

```
wrapperInt = 100;
wrapperLong = 2000000L;
wrapperShort = 10;
wrapperByte = 'a';
wrapperDouble = 2.85;
wrapperFloat = 1.25f;
wrapperChar = 'c';
wrapperBoolean = true;
		
System.out.println("Auto Boxing int -> Int : " + wrapperInt);
System.out.println("Auto Boxing long -> Long : " + wrapperLong);
System.out.println("Auto Boxing short -> Short : " + wrapperShort);
System.out.println("Auto Boxing byte -> Byte : " + wrapperByte);
System.out.println("Auto Boxing double -> Double : " + wrapperDouble);
System.out.println("Auto Boxing float -> Float : " + wrapperFloat);
System.out.println("Auto Boxing char -> Character : " + wrapperChar);
System.out.println("Auto Boxing boolean -> Boolean : " + wrapperBoolean);
```

# 3. ラッパークラスのインスタンスからプリミティブ型に変換
- ラッパークラス　-> プリミティブ型への変換は**各ラッパークラスのxxxValue()メソッドを使って**行います。

```
// xxxValue()メソッドを使い変換
int primitiveInt = wrapperInt.intValue();
long primitiveLong = wrapperLong.longValue();
short primitiveShort = wrapperShort.shortValue();
Byte primitiveByte = wrapperByte.byteValue();
double primitiveDouble = wrapperDouble.doubleValue();
float primitiveFloat = wrapperFloat.floatValue();
char primitiveChar = wrapperChar.charValue();
boolean primitiveBoolean = wrapperBoolean.booleanValue();
		
System.out.println("Int -> int : " + primitiveInt);
System.out.println("Long -> long : " + primitiveLong);
System.out.println("Short -> short : " + primitiveShort);
System.out.println("Byte -> byte : " + primitiveByte);
System.out.println("Double -> double : " + primitiveDouble);
System.out.println("Float -> float : " + primitiveFloat);
System.out.println("Character -> char : " + primitiveChar);
System.out.println("Boolean -> boolean : " + primitiveBoolean);
```

- xxxValue()メソッドを使わず、ラッパークラスの参照変数を代入する方法でも変換できます。
こちらの機能を**オートアンボクシング(Auto Unboxing)**と言います。

```
primitiveInt = wrapperInt;
primitiveLong = wrapperLong;
primitiveShort = wrapperShort;
primitiveByte = wrapperByte;
primitiveDouble = wrapperDouble;
primitiveFloat = wrapperFloat;
primitiveChar = wrapperChar;
primitiveBoolean = wrapperBoolean;
		
System.out.println("Auto UnBoxing Int -> int : " + primitiveInt);
System.out.println("Auto UnBoxing Long -> long : " + primitiveLong);
System.out.println("Auto UnBoxing Short -> short : " + primitiveShort);
System.out.println("Auto UnBoxing Byte -> byte : " + primitiveByte);
System.out.println("Auto UnBoxing Double -> double : " + primitiveDouble);
System.out.println("Auto UnBoxing Float -> float : " + primitiveFloat);
System.out.println("Auto UnBoxing Character -> char : " + primitiveChar);
System.out.println("Auto UnBoxing Boolean -> boolean : " + primitiveBoolean);
```

# 4. 文字列を数字に変換する
各ラッパークラスの**'parseXxx()メソッド'を使い**変換できます。

```
String intStr = "123";
int intFromStr = Integer.parseInt(intStr);
		
String doubleStr = "3.15";
double doubleFromStr = Double.parseDouble(doubleStr);
		
System.out.println("String -> Int : "+intFromStr);
System.out.println("String -> Double : "+doubleFromStr);
```


# 5. 数字を文字列に変換する
各ラッパークラスの**'toString()メソッド'を使い変換**でき、**'String.valueOf()メソッド'を用いて変換できます。**

```
String strFromInt = Integer.toString(intFromStr);
String strFromInt2 = String.valueOf(intFromStr); 
		
System.out.println("Int -> String using Integer.toString : "+strFromInt);
System.out.println("Int -> String using String.valueOf : "+strFromInt2);
		
String strFromDouble = Double.toString(doubleFromStr);
String strFromDouble2 = String.valueOf(doubleFromStr);
		
System.out.println("Double -> String using Integer.toString : "+strFromDouble);
System.out.println("Double -> String using String.valueOf : "+strFromDouble2);
```


******

※ 例示コード
https://github.com/leeyoungseung/algorithmBasic/blob/master/algorithm/src/basic/B_10_Wrapper.java

※ 韓国語のポストは以下のURLで確認できます。
https://koiking.tistory.com/82?category=1068655