初めに
Javaでは数値や文字列を扱うための型という定義が存在する。これらは別の型から別の型に変換できるものもあれば、変換に一工夫が必要なものもある。
型の種類について
Javaで取り扱う型は以下が存在する。
〇基本データ型(プリミティブ型)
値をそのまま保持するイメージ。
型名 | 分類 | 範囲 | サイズ |
---|---|---|---|
byte | 整数 | -128~127 | 8bit |
short | 整数 | −32,768 ~ 32,767 | 16bit |
int | 整数 | −2,147,483,648 ~ 2,147,483,647 | 32bit |
long | 整数 | −9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 64bit |
float | 小数 | 32bit | |
double | 小数 | 64bit | |
char | 1文字 | 16bit | |
boolean | 真偽値 | 1bit |
整数のデフォルトはint型、小数のデフォルトはdouble型である。またlong型では末尾にL、float型では末尾にFをつける。
〇参照型
メモリ上に存在するデータを参照するイメージ。
型名 | 分類 |
---|---|
String | 文字列 |
なおString型はchar[]のようなイメージ。String型でabcの文字列があったとしたら以下のように考えることができる。
またString型は参照型だが疑似プリミティブ型とも呼ばれる。その理由として不変性がある。
突然だが以下のようなソースの結果はどうなるだろうか?
public class Main {
public static void main(String[] args) {
String str = "Hello";
str.replace("H", "A");
System.out.println(str);
}
}
replaceメソッドは第一引数の文字を第二引数の文字に置き変えするメソッドである。どのような結果になるか考えてみよう。
解答はこちら
Hello
この場合Aelloにはならない。strは不変なオブジェクトなので、代入しない限りstr自体が変更されることは無い。
StringBuilderクラス
String型は不変だがStringBuilderクラスは可変なクラスである。以下の問題を考えてみよう。
public class Main {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("Hello");
str.replace(0,1,"A");
System.out.println(str);
}
}
解答はこちら
Aello
この場合StringBuilerクラスは可変なので、replaceメソッドで文字列の書き換えが行われ、strにも反映される。ここで注意なのがreplaceメソッドの使い方。String型とは異なり、第1引数から第2引数までの文字を第3引数の文字に変換する。
まとめ
- Javaでは基本データ型(プリミティブ型)と参照型が存在する
- 整数を取り扱う型では取り扱うことができる範囲が異なるので注意
- String型は不変なオブジェクトなので、代入されない限り値が変わることは無い
- StringBuilderクラスは可変なので、文字列の書き換えが可能