charとは?
Javaのchar型は、1文字を扱うためのデータ型です。「char」は「character(キャラクター)」の略で、プログラム中に文字を格納する際に使います。
Javaのchar型はプリミティブ型のひとつで、0から65535までの整数値として文字を表現します。たとえば、アルファベットの「A」はUnicodeで65という数値に対応しており、char型はこの数値を文字として扱うことが可能です。
char型の変数を宣言するときは、格納する文字をシングルクォート(')で囲みます。ダブルクォート(")はString(文字列)型に使うものなので、混同しないよう気をつけましょう。
Javaでは、1文字だけを扱いたい場合にchar型を使います。一方、複数の文字をまとめて扱う場合はString型を使うのが一般的です。また、必要に応じてchar型の配列で複数文字を扱うこともできます。
char型とString型のちがいを理解することは、Javaプログラミングの基本をおさえるうえでとても役立ちます。どちらの型も文字に関わるデータを扱いますが、用途や書き方に明確なちがいがあることを覚えておきましょう。
基本構文
char型の宣言と初期化は、いくつかの方法で行えます。最も基本的なのはシングルクォートで文字を囲む方法ですが、Unicodeのコードポイントを直接指定したり、整数値をキャストして代入したりすることもできます。
以下のコード例で、代表的な書き方を確認してみましょう。
例1:シングルクォートで文字を直接代入する
出力結果
A
@
9最も基本的な書き方です。シングルクォート(' ')の中に1文字を記述すると、その文字がchar型の変数に格納されます。文字、記号、数字の文字どれもchar型として扱えます。
例2:Unicodeエスケープシーケンスで代入する
出力結果
A
あ\uに続けて4桁の16進数を書くことで、Unicodeのコードポイントを直接指定できます。\u0041はアルファベットの「A」、\u3042はひらがなの「あ」に対応しています。日本語などのマルチバイト文字もchar型で扱える点がわかります。
なお、\uXXXXで指定できるのは16ビットの値のみです。絵文字のような補助平面の文字は、\uXXXX1つでは表現できず、サロゲートペアが必要になります。
例3:整数値をキャストしてchar型に代入する
出力結果
B整数値をキャスト(型変換)することで、その数値に対応する文字をchar型として取り出せます。Unicodeで66に対応する文字は「B」です。このようにchar型と整数型は互いに変換できる関係にあります。
実用例
ここではchar型を実際のプログラムで使う場面を、具体的なサンプルコードを交えながら説明します。それぞれのコードで何をしているかを読み解くことで、char型の使い方への理解が深まります。
文字を変数に格納して表示する
まずは最も基本的な使い方として、char型の変数に文字を格納して画面に出力するコードを見てみましょう。
動物の名前の頭文字をchar型の変数に入れて、順番に表示するサンプルです。
出力結果
ネコの頭文字: C
イヌの頭文字: D
トリの頭文字: Bchar型の変数にシングルクォートで文字を格納し、System.out.printlnで出力しています。文字列(String型)と+演算子でつなげて出力できる点もchar型の便利な特徴のひとつです。この例では、動物の名前の頭文字をそれぞれの変数に格納して表示しています。char型を使うことで、1文字のデータをシンプルに扱えることがわかります。
文字の比較を条件分岐に使う
char型の変数は、==演算子を使って別の文字と比較できます。この性質を条件分岐と組み合わせることで、特定の文字かどうかを判定するプログラムが書けます。
入力された動物の種別コードが「C」(ネコ)かどうかを判定するサンプルです。
出力結果
このコードはネコですchar型同士の比較には==演算子を使います。String型の文字列比較ではequals()メソッドを使う必要がありますが、char型はプリミティブ型なので==で直接比較できます。条件分岐と組み合わせることで、入力値に応じた処理の振り分けができるようになります。
文字をインクリメントして連続表示する
char型はUnicodeのコードポイントに基づく整数値と対応しているため、++演算子でインクリメント(1ずつ増やすこと)ができます。これを使うと、アルファベットを順番に表示するといった処理を簡潔に書けます。
アルファベットの「A」から「E」までを順番に出力するサンプルです。
出力結果
A
B
C
D
Echar型の変数に++演算子を組み合わせた例です。Unicodeのコードポイントが1つ進み、次の文字に変化します。「A」のコードポイントは65なので、インクリメントするたびに66(B)、67(C)と変化していきます。for文と組み合わせることで、連続する文字を効率よく処理できます。
文字列からchar型を取り出して処理する
String型の文字列からchar型の文字を1文字ずつ取り出すには、charAt()メソッドを使います。文字列を1文字ずつ検査したいときに役立つ方法です。
動物の名前の文字列から各文字を順番に取り出して表示するサンプルです。
出力結果
1番目の文字: R
2番目の文字: a
3番目の文字: b
4番目の文字: b
5番目の文字: i
6番目の文字: tcharAt()メソッドは、引数に指定したインデックス(添字)の位置にある文字をchar型で返します。インデックスは0から始まるため、最初の文字はcharAt(0)で取得します。この例ではfor文と組み合わせ、文字列全体を1文字ずつ順番に処理しています。文字列の解析やフィルタリングを行うときに活用できる手法です。
char型をint型に変換して文字コードを確認する
char型の変数をint型にキャストすると、その文字に対応するUnicodeのコードポイント(整数値)を取り出せます。デバッグや文字コードの確認をしたいときに役立つ方法です。
いくつかの動物の名前の先頭文字について、対応する文字コードを確認するサンプルです。
出力結果
F の文字コード: 70
W の文字コード: 87char型をint型にキャストすると、そのcharに対応するUnicodeコードポイントの整数値が得られます。「F」は70、「W」は87というように、各文字には固有の数値が割り当てられています。この仕組みを理解しておくと、文字の大小比較(例:'A' < 'B')や文字コードを使った演算など、より発展的な処理に応用できます。
char配列を使って文字の並びを操作する
char型を配列にすることで、複数の文字をインデックス付きの連続データとして管理できます。char配列は文字の集まりを処理したいときに使う手法で、String型と変換もできます。
動物の名前をchar配列として定義し、各文字を操作するサンプルです。
出力結果
L
i
o
n
文字列に変換: Lionchar型の配列は{}を使って宣言時に初期化できます。for文で各要素にアクセスして1文字ずつ処理できるほか、new String(charArray)を使ってString型の文字列に変換することもできます。逆に、String型からtoCharArray()メソッドを使ってchar配列に変換することも可能です。文字列とchar配列の相互変換は実務でもよく使われます。
まとめ
char型は、文字を扱うプログラムを書くうえで欠かせない基本の型です。String型が複数の文字をまとめて扱うのに対して、char型は「1文字だけ」を対象にするため、文字単位の細かな操作に向いています。
以下のような場面でchar型が活躍します。
- 文字列から1文字ずつ取り出して検査・変換する処理への活用
- アルファベットや数字コードを条件として分岐する判定処理での利用
- char配列とStringの相互変換による文字データの柔軟な操作
フォーム入力の検証や暗号化・変換処理など、実務でも利用される機会が多いのがchar型です。基礎を押さえることで、処理内容の理解が容易になります。
重要なポイント
この記事で学んだ内容を振り返り、char型を使うときに重要なポイントをまとめます。
- クォートの使い分けが重要で、charは'A'、Stringは"A"と明確に覚える
- charは整数とも相互変換でき、Unicodeを利用した処理ができる
- charAt()やtoCharArray()により、Stringとcharを組み合わせた処理が可能
char型はJavaを学ぶ際に早い段階で出会う型のひとつですが、その仕組みはUnicodeや型変換といった重要な概念と深くつながっています。この記事で紹介したコード例を実際に動かしてみながら、char型への理解を着実に深めていきましょう。