Javaのchar型が丸わかり!基本から応用、便利なメソッドまで網羅

2025年8月12日火曜日

Java

Javaのchar型は、プログラミング学習の初期段階で出会う基本的なデータ型の一つです。しかし、String型との違いや具体的な使い方がわからず、戸惑ってしまうケースも少なくありません。

この記事では、Javaのchar型の基本から、String型との明確な違い、文字コードとの関係、さらには実務で役立つ便利なメソッドまで、網羅的に解説していきます。

この記事で学べること

  • Javaのchar型の基本的な使い方
  • char型とString型の明確な違い
  • 文字コードやエスケープシーケンスの扱い方
  • 実務で役立つ便利なメソッドの活用法
  • よくあるエラーとその解決策

Javaのchar型とは?

最初に、Javaのchar型がどのようなデータ型なのか、その本質と学習の重要性を確認します。文字を扱う型は他にもありますが、char型を理解することで、よりメモリ効率の良いコーディングが可能になります。

  • そもそもデータ型って何?
  • Javaで文字を扱う2つの方法
  • なぜchar型を学ぶ必要があるの?

そもそもデータ型って何?

プログラミングにおけるデータ型とは、数値や文字などの「値の種類」を定義するものです。Javaには整数を扱うint型、小数を扱うdouble型など、様々なデータ型が用意されています。char型は、その中でも「1文字」を専門に扱うためのデータ型です。

Javaで文字を扱う2つの方法

Javaで文字情報を扱うデータ型は、主に2種類あります。

  • char型
    • 1文字だけを扱う (例 'A', 'あ', '1')
  • String型
    • 0文字以上の文字列を扱う (例 "Hello", "こんにちは")

1文字だけを扱いたいのか、複数の文字からなる文章を扱いたいのかによって、使い分けが必要です。

なぜchar型を学ぶ必要があるの?

「String型があれば、char型は不要では?」と感じるかもしれません。しかし、char型には明確なメリットが存在します。

例えば、プログラムのパフォーマンスです。char型はString型に比べて、使用するメモリ量が少なく、処理も高速です。1文字単位でデータを判定したり、パスワードの1文字を検証したりするような場面では、char型が活躍します。

まずは覚えよう!Javaのchar型の基本的な使い方

ここでは、Javaのchar型を使う上での基本ルールを学びます。変数の宣言から値の代入、そして最も重要な「シングルクォーテーション」のルールまで、サンプルコードと共に見ていきましょう。

  • char型の変数を宣言する方法
  • char型の変数に値を代入する方法
  • ルール 必ずシングルクォーテーションで囲む

char型の変数を宣言する方法

char型の変数を使うには、まず「宣言」を行います。データ型の後ろに変数名を書くだけのシンプルな記述です。

// char型の変数 c1 を宣言
char c1;

char型の変数に値を代入する方法

宣言した変数には、イコール(=)を使って値を「代入」します。宣言と同時に値を代入することも可能です。

// char型の変数 c2 を宣言し、'A'という文字を代入
char c2 = 'A';

// char型の変数 c3 を宣言し、'B'という文字を代入
char c3;
c3 = 'B';

ルール 必ずシングルクォーテーションで囲む

char型を扱う上で、絶対に守るべきルールがあります。それは、代入する文字を必ずシングルクォーテーション(' ')で囲むことです。

ダブルクォーテーション(" ")で囲むと、それはString型(文字列)とみなされ、エラーが発生します。

// 正しい例
char c_ok = 'a';

// 間違った例(コンパイルエラーになる)
// char c_ng = "a";

Javaのchar型とString型の違いとは?

Javaのchar型とString型の違いを、3つの観点から深掘りします。扱える文字数という表面的な違いだけでなく、データ型としての性質やパフォーマンスの違いを理解することで、適切な使い分けができるようになります。

  • 扱える文字の数
  • データ型の種類(プリミティブ型 vs 参照型)
  • パフォーマンス

違い①:扱える文字の数

最も分かりやすい違いは、扱える文字の数です。

  • char型 厳密に1文字だけ。空(0文字)や2文字以上は扱えません。
  • String型 0文字以上の任意の長さの文字列を扱えます。

違い②:データ型の種類(プリミティブ型 vs 参照型)

Javaのデータ型は、「プリミティブ型」と「参照型」に大別されます。char型はプリミティブ型、String型は参照型に分類され、メモリ上でのデータの持ち方が根本的に異なります。

プリミティブ型 (char)
変数の中に、値そのものが直接格納されます。シンプルで高速に動作します。

参照型 (String)
変数の中には、データが実際に格納されているメモリ上の場所(アドレス)が格納されます。実際のデータは別の場所にあります。

【メモリのイメージ】

[プリミティブ型: char c = 'A';]
変数cの領域
+-------+
|  'A'  |
+-------+

[参照型: String s = "ABC";]
変数sの領域                    実際のデータ領域
+-----------+  参照する  +-----------+
|  (番地)   | --------> |  "ABC"    |
+-----------+            +-----------+

この違いにより、null(何もない状態)を代入できるかどうかも変わります。参照型であるStringはnullを代入できますが、プリミティブ型であるcharにはnullを代入できません。

違い③:パフォーマンス

一般的に、プリミティブ型は参照型よりも高速に動作し、メモリ使用量も少ない傾向にあります。したがって、1文字のデータを扱う場合は、String型よりもchar型を使った方がパフォーマンス上有利です。

char型とString型の比較表
項目 char型 String型
分類 プリミティブ型 参照型
値の表現 シングルクォーテーション(' ') ダブルクォーテーション(" ")
扱える文字数 1文字 0文字以上
nullの代入 不可 可能
メモリサイズ 2バイト(固定) 可変

ちょっと応用!Javaのchar型と文字コードの世界

Javaのchar型について、もう少し深く探求してみましょう。実は、char型は内部で数値を保持しています。ここでは、その仕組みである「文字コード」との関係や、数値との変換方法について解説します。

  • char型の正体はUnicodeの数値
  • char型と数値の変換方法(キャスト)
  • char型で簡単な足し算・引き算もできる

char型の正体はUnicodeの数値

コンピュータは文字を直接理解できません。そのため、「どの数値がどの文字に対応するか」というルールを定めた「文字コード」を使います。Javaのchar型は、内部的にUnicode(ユニコード)という世界共通の文字コード体系に基づいた数値を保持しています。

char型は2バイト(16ビット)のメモリサイズを持ち、0から65535までの数値を表現できます。例えば、文字の 'A' は、Unicodeでは数値の65に対応します。

より詳しい情報は、Javaの公式ドキュメントで確認できます。
参考 > Primitive Data Types (The Java™ Tutorials)

char型と数値の変換方法(キャスト)

char型を意図的に数値(int型)に変換したり、その逆を行ったりすることも可能です。この変換操作を「キャスト」と呼びます。

// char型からint型へのキャスト
char c1 = 'A';
int num1 = (int) c1; // c1をint型にキャスト
System.out.println(num1); // 結果: 65

// int型からchar型へのキャスト
int num2 = 66;
char c2 = (char) num2; // num2をchar型にキャスト
System.out.println(c2); // 結果: B

char型で簡単な足し算・引き算もできる

char型が内部的に数値である性質を利用すると、文字に対して簡単な算術演算ができます。アルファベットを順番に処理したい場合などに役立ちます。

char c = 'C';

// 'C'の次の文字を取得
char nextChar = (char)(c + 1);
System.out.println(nextChar); // 結果: D

// 'C'の前の文字を取得
char prevChar = (char)(c - 1);
System.out.println(prevChar); // 結果: B

演算結果はint型になるため、再度char型にキャストする必要がある点に注意しましょう。

Javaのchar型をマスターするための7つの便利テクニック

Javaには、char型をより便利に扱うための機能が「Character(キャラクター)クラス」に用意されています。ここでは、その中から特に実用的な7つのメソッドを厳選し、具体的な使い方を紹介します。

  • 文字か数字かを判定する (isLetterOrDigit)
  • 大文字か小文字かを判定する (isUpperCase / isLowerCase)
  • 空白文字かどうかを判定する (isWhitespace)
  • 大文字と小文字を変換する (toUpperCase / toLowerCase)
  • 数値と文字を変換する (getNumericValue / forDigit)
  • char配列を文字列に変換する
  • 文字列をchar配列に変換する (toCharArray)

これらのメソッドを使うと、自前で複雑な条件分岐を書かなくても、文字の種類を簡単に判定したり、変換したりできます

テクニック1:文字か数字かを判定する (isLetterOrDigit)

指定された文字が、アルファベットまたは数字であるかどうかを判定します。

char c1 = 'a';
char c2 = '7';
char c3 = '!';

System.out.println(Character.isLetterOrDigit(c1)); // 結果: true
System.out.println(Character.isLetterOrDigit(c2)); // 結果: true
System.out.println(Character.isLetterOrDigit(c3)); // 結果: false

テクニック2:大文字か小文字かを判定する (isUpperCase / isLowerCase)

指定された文字が、大文字または小文字であるかを判定します。

char c1 = 'A';
char c2 = 'b';
char c3 = '9';

// 大文字か判定
System.out.println(Character.isUpperCase(c1)); // 結果: true
System.out.println(Character.isUpperCase(c2)); // 結果: false

// 小文字か判定
System.out.println(Character.isLowerCase(c2)); // 結果: true
System.out.println(Character.isLowerCase(c3)); // 結果: false

テクニック3:空白文字かどうかを判定する (isWhitespace)

スペースやタブなどの空白文字かどうかを判定します。

char c1 = ' ';   // 半角スペース
char c2 = '\t';  // タブ文字
char c3 = 'a';

System.out.println(Character.isWhitespace(c1)); // 結果: true
System.out.println(Character.isWhitespace(c2)); // 結果: true
System.out.println(Character.isWhitespace(c3)); // 結果: false

テクニック4:大文字と小文字を変換する (toUpperCase / toLowerCase)

アルファベットの大文字と小文字を相互に変換します。

char c1 = 'a';
char c2 = 'B';

// 小文字から大文字へ
System.out.println(Character.toUpperCase(c1)); // 結果: A

// 大文字から小文字へ
System.out.println(Character.toLowerCase(c2)); // 結果: b

テクニック5:数値と文字を変換する (getNumericValue / forDigit)

文字としての数字('0'~'9')と、数値としての数字(0~9)を相互に変換します。

// 文字'8'を数値8に変換
char c = '8';
int num = Character.getNumericValue(c);
System.out.println(num); // 結果: 8

// 数値5を文字'5'に変換(10進数)
char ch = Character.forDigit(5, 10);
System.out.println(ch); // 結果: 5

テクニック6:char配列を文字列に変換する

char型の配列(複数のchar型をまとめたもの)は、Stringクラスの機能を使って簡単に文字列に変換できます。

char[] charArray = {'J', 'a', 'v', 'a'};

// char配列からStringを生成
String str = new String(charArray);
System.out.println(str); // 結果: Java

テクニック7:文字列をchar配列に変換する (toCharArray)

逆に、String型の文字列を1文字ずつのchar配列に分解することも頻繁に利用されます。

String str = "Hello";

// Stringをchar配列に変換
char[] charArray = str.toCharArray();

// 配列の中身を表示
// H, e, l, l, o,
for (char c : charArray) {
    System.out.print(c + ", ");
}

Characterクラスには他にも多くの便利メソッドがあります。詳細は公式APIドキュメントを参照してください。
参考 > Character (Java™ Platform SE 21)

覚えておくと便利!char型で特殊文字を扱う方法

プログラム上で改行やタブなど、キーボードから直接入力しづらい特殊な文字を表現する方法を解説します。エスケープシーケンスという仕組みを使えば、様々な特殊文字をchar型で扱うことが可能です。

  • エスケープシーケンスとは?
  • これだけは覚えたい!代表的なエスケープシーケンス一覧
  • Unicodeを使って好きな文字を表現する

エスケープシーケンスとは?

エスケープシーケンスとは、バックスラッシュ(\)と特定の文字を組み合わせることで、特別な意味を持つ文字を表現する手法です。例えば、文字として「改行」を表現したい場合に利用します。

これだけは覚えたい!代表的なエスケープシーケンス一覧

よく使われるエスケープシーケンスを以下にまとめます。

主なエスケープシーケンス
シーケンス 意味
\n 改行
\t タブ
\' シングルクォーテーション
\" ダブルクォーテーション
\\ バックスラッシュ
// シングルクォーテーション自体を文字として扱う例
char singleQuote = '\'';
System.out.println(singleQuote); // 結果: '

Unicodeを使って好きな文字を表現する

エスケープシーケンスの一種で、「\u」に続けて4桁の16進数を記述すると、任意のUnicode文字を表現できます。絵文字や特殊な記号もchar型で扱えます。

// Unicodeで円マークを指定
char yen = '\u00A5';
System.out.println(yen); // 結果: ¥

// Unicodeでハートマークを指定
char heart = '\u2665';
System.out.println(heart); // 結果: ♥

Javaのchar型でよくあるエラー3選と解決策

Javaのchar型を扱う際、初心者が遭遇しやすい典型的なコンパイルエラーを3つ紹介します。エラーの原因と正しい書き方を理解すれば、同じ間違いを防ぐことができます。

  • エラー1 「invalid character literal」- 空の文字や2文字以上を代入
  • エラー2 「incompatible types: String cannot be converted to char」- ダブルクォーテーションで囲む
  • エラー3 「not a statement」- 比較のつもりが代入になっている

エラー1:「invalid character literal」- 空の文字や2文字以上を代入

このエラーは、char型のルール(厳密に1文字)を破った場合に発生します。シングルクォーテーションの中に文字がなかったり、2文字以上入れたりするとエラーになります。

// 悪い例
// char c1 = '';      // 空の文字はNG
// char c2 = 'ab';     // 2文字以上はNG

// 良い例
char c3 = 'a';

エラー2:「incompatible types: String cannot be converted to char」- ダブルクォーテーションで囲む

このエラーメッセージは「String型をchar型に変換できません」という意味です。文字をダブルクォーテーションで囲んでしまうと、String型と解釈されるために発生します。

// 悪い例
// char c1 = "a"; // ダブルクォーテーションはString型

// 良い例
char c2 = 'a';   // char型はシングルクォーテーション
String s1 = "a"; // String型はダブルクォーテーション

エラー3:「not a statement」- 比較のつもりが代入になっている

これはchar型に限りませんが、条件分岐などで文字を比較する際にやりがちな間違いです。比較演算子はイコール2つ(==)ですが、1つ(=)にしてしまうと代入とみなされ、文法エラーとなります。

char c = 'A';

// 悪い例 (比較ではなく代入になっている)
// if (c = 'A') { ... }

// 良い例 (比較は==を使う)
if (c == 'A') {
    System.out.println("文字はAです。");
}

まとめ:Javaのchar型を正しく理解して文字処理の達人になろう!

今回は、Javaの基本的なデータ型であるchar型について、その使い方からString型との違い、応用的なテクニックまで幅広く解説しました。

  • char型はシングルクォーテーションで囲んだ1文字を扱う
  • 内部的にはUnicodeの数値を保持している
  • String型とはデータ型の種類やパフォーマンスが異なる
  • Characterクラスのメソッドを使うと様々な処理が簡単に書ける
  • よくあるエラーのパターンを覚えておくとデバッグが早くなる

char型とString型の特性を正しく理解し、場面に応じて使い分けることが、質の高いコードを書くための第一歩です。この記事が、あなたのJava学習の一助となれば幸いです。

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ