検索

キーワード


【Java】リテラルってなに? リテラル(数値、文字、文字列)の使い方を解説!

  • 公開日:2020-09-04 07:15:05
  • 最終更新日:2021-01-25 17:39:51
【Java】リテラルってなに? リテラル(数値、文字、文字列)の使い方を解説!




こんにちは。駆け出しプログラマーの松倉です!

ここでは、リテラルついて紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです! 

関連記事リンク:【Java】基本的な数値処理!Mathクラスの使い方を解説!【Java】演算子(算術演算子と複合演算子)の使い方を解説! インクリメントとデクリメントの使い方!【Java】比較演算子、論理演算子、ビット演算子、シフト演算子の使い方について解説!


リテラル

リテラルとはプログラムのソースコード中に直に書かれる数値や文字、文字列の値のことです。

表記の仕方によってデータ型を識別できるように書式が言語仕様によって定められています。

int i = 123;
char c = 'A';
String s = "文字列";
double d = 0.1d + 111.1d;

青文字で表現されているものがリテラルに当たります。


リテラルの分類として数値リテラル、文字リテラル、文字列リテラルなどがあります。

この記事ではリテラルについて以下の解説をします。

〇数値リテラル

  •  整数リテラル 
  •  浮動小数点数リテラル 
  •  数値リテラルの桁区切り表現  
  •  サフィックス 

〇文字リテラル

  • 文字コード 

〇文字列リテラル

  •  文字列リテラル
  •  エスケープシーケンス



数値リテラル

整数リテラル

整数リテラルは整数の数値を扱うためのリテラルです。

計算をする場合に使ったり繰り返し回数をカウントする場合に使用されます。   

整数リテラルは 10進数、2進数、8進数、16進数で表現されます。

 

10進数リテラル

  先頭がゼロでない「1 ~ 9」までの数値で始まり、続く数値は「0 1 2 3 4 5 6 7 8 9」までの数値の組み合わせになる。

2進数リテラル

  先頭が「0B」または「0b」で始まり、続く数値が「0 1」の組み合わせになる。

8進数リテラル

  先頭が「0」で始まり、続く数値が「0 1 2 3 4 5 6 7」の組み合わせになる。

16進数リテラル

   先頭が「0X」または「0x」で始まり、続く値が「0 1 2 3 4 5 6 7 8 9 A B C D E F」(小文字も含む)の 16文字の英数字の組み合わせになる。


整数リテラルをサンプルコードで確認しましょう。

public class Sample1 {
	public static void main(String[] args) {
		System.out.println(506);           //10進数
		System.out.println(0b111111010);   //2進数
		System.out.println(0772);          //8進数
		System.out.println(0x1fa);         //16進数
	}
}


実行結果:

506
506
506
506

値の先頭に「0」や「0x」を付けることで進数変換されることが確認できました。


浮動小数点数リテラル

浮動小数点数リテラルは小数点以下の部分を持つ実数の値です。

非常に大きな数値、または非常に小さな数値を表すことができます。

「3.14」などのように整数部分と小数部分をピリオドを使って表します。

また「2.525e2」のような指数表現でも表すことができます。 

指数表現を表現方法

[仮数部] e [符号] [指数部]

※10の何乗で表現する場合は e (または E )を使います。

 

指数表現の具体例

9.999e39999(9.999 × 10^3)
1.234e-40.0001234(1.234 × 10^-4)


浮動小数点数と指数表現をサンプルコードで確認しましょう。

public class Sample2 {
	public static void main(String[] args) {
		System.out.println(12.345);
		System.out.println(6.789e5);
		System.out.println(3.14e-5);
	}
}


実行結果:

12.345
678900.0
3.14E-5

浮動小数点数リテラルを確認することができました。



数値リテラルの桁区切り表現

数値リテラルでは非常に大きい数値を読みやすくするために、 桁毎に区切り文字を入力する桁区切り表現があります。

一般的には「1,234,567」 のように 3桁毎にカンマ(,)を使用しますが、Javaにおいてはカンマは別の用途で使用しているため「1_234_567」のようにアンダーバー(_)を使用します。

このような桁区切り表現は特に制限はないためどのように文字を区切っても構いません。

桁区切り表現はプログラムの可読性の向上のために使用するため、数値リテラルを画面に出力したりする場合アンダーバー(_)は取り除かれて表示されます。

整数だけはなく 2進数や 16進数のような進数や、浮動小数点数でも桁区切り文字を記述することができます。

しかしこの桁区切り表現は下記のように数値の先頭や最後、また数値と数値以外の間には記述することはできません。

_123_4._56x_789f

このような記述はコンパイルエラーが発生します。


桁区切り表現を行ったコードとその実行結果をサンプルコードで確認しましょう。

public class Sample3 {
	public static void main(String[] args) {
		System.out.println(1_234_567);
		System.out.println(0b10_11_01_10);
		System.out.println(3.14_15_92);
	}
}


実行結果:

1234567
182
3.141592

プログラム中では桁区切り文字が記述されていますが、画面に出力するときには取り除かれていることが確認できました。



サフィックス 

整数リテラルは特に型を指定しない場合 int型の値として扱われ、浮動小数点数リテラルは double型の値として扱われます。

 int型の範囲(-2147483648 ~ 2147483647)を超えた数値を整数リテラルとして記述するとコンパイルエラーが発生します。

サフィックスはリテラルの末尾に特定の文字や記号を付加することで、データ型などを指定することができます

値の最後に Lまたは lを付けることで int型ではなく long型の値として扱われるようになり、 int型の範囲より大きい値を記述することができます。


同様に浮動小数点数リテラルの場合は Dまたは dを付けると double型、 Fまたは fを付けるとは float型となります。

浮動小数点数リテラルは整数リテラルの場合と異なり、もともと float型よりも扱える範囲が大きい double型として扱われており、扱える数値の範囲を大きくするためにサフィックスを付けません。

しかし float型の変数に浮動小数点数リテラルを代入する場合、サフィックスを付けないとリテラルが float型の範囲の数値であってもエラーとなります。

そのため値として扱いたい場合に数値の最後に Fまたは fを付けましょう。


サフィックスを付けない場合に起こるエラーをサンプルコードで確認しましょう。

public class Sample4_1 {
	public static void main(String[] args) {
		System.out.println(2200000000);
		float num;
		num = 3.14;
		System.out.println(num);
	}
}

整数リテラルでは int型に格納できる数値の範囲を超えているため「型 int のリテラル 2200000000 は範囲外です」とコンパイルエラーが発生します。

浮動小数点数リテラルでは変数を float型に指定したが記述した値にサフィックスを付けていないため「 double から float には変換できません」とコンパイルエラーが発生します。


次にサフィックスを付けたサンプルコードを確認しましょう。

public class Sample4_2 {
	public static void main(String[] args) {
		System.out.println(2200000000L);
		float num;
		num = 3.14F;
		System.out.println(num);
	}
}


実行結果:

2200000000
3.14

サフィックスを付けることで有効範囲内に収まり、プログラムが正しく実行されたことが確認できました。



文字リテラル

文字、文字コード

文字リテラルは 1つの文字の値です。「a」や「あ」などが文字リテラルとなります。

複数の文字からなる「あいうえお」のような値は文字列リテラルと呼ばれ、文字リテラルとは別です。

文字リテラルは画面に出力したり、char型の変数に代入することができます。

文字リテラルはシングルクォーテーション(')で囲んで表現します。

※ダブルクォーテーション(")とは異なることに注意しましょう。

char c = 'A';

文字リテラルは 1文字のリテラルのため、複数の文字や空の文字が含まれている場合はエラーとなります。


また文字リテラルは文字コードを使って表現することができます。

文字の集合に対してどのように数値を割り当てるのかを定義したものが文字エンコーディングです。

そして Javaで利用している文字エンコーディングが Unicodeの UTF-8や UTF-16などです。

コンピューターでは文字を表現するために文字の集合を定義し、一つ一つの文字に対して数値が割り当てています。

この数値が文字コードと呼ばれ、文字コードを使って文字リテラルの表現することができます。

 Unicodeでは 'a' や 'あ' の文字コードは下記のように表現されます。

'a'0x0061 
'あ'0x3042


文字リテラルをサンプルコードで確認しましょう。

public class Sample5 {
	public static void main(String[] args) {
		char c = '花';
		System.out.println(c);
		System.out.println('a');
		System.out.println('¥u0061');
	}
}


実行結果:

花
a
a

文字コードでも文字リテラルを表現できることが確認できました。



文字列リテラル

文字列リテラル

文字列リテラルは複数の連続する文字で構成される値です。

「Hello」や「こんにちは」などが文字列リテラルとなります。

画面にメッセージを表示する場合などに使用される頻度がとても高いリテラルであり、文字列リテラルは画面に出力したり String型の変数に代入することができます。

Javaで文字列リテラルを表すにはダブルクォーテーション(")で囲んで表現します。

String s = "Hello";

"こんにちは"や "Hello"など文字列をダブルクオーテーションで囲んでいますが、他のプログラミング言語ではシングルクオーテーション(')で囲んで表すことができるものもあります。

 Javaの場合はエラーとなるので注意しましょう。

文字列リテラルは一文字や空文字(0文字)でも構いません。


文字列リテラルをサンプルコードで確認しましょう。

public class Sample6 {
	public static void main(String[] args) {
		System.out.println("HelloWorld");
		System.out.println("こんにちは");
	}
}


実行結果:

HelloWorld
こんにちは

文字列リテラルの表現を確認できました。



エスケープシーケンス

エスケープシーケンスとは、プログラムとして記述する場合にそのままでは表現できない「タブ」や「改行」といった特殊な文字を表現するための方法です。

例えば、プログラムの記述で文字列の途中に改行を入れたいときに、そのまま改行を入れてしまうとコンパイルエラーになります。

このように文字列の中で実際に改行するのではなく、改行のような特殊な文字として表現するために用意されたのがエスケープシーケンスです。

エスケープシーケンスは「\」+特定の文字の組み合わせで表現します。

\」という文字はエスケープシーケンスが始まるという特別な意味を持っています。

※Windows環境では 「\」は「¥」と表示されます。


エスケープシーケンスの一覧

\b      バックスペース
\t      水平タブ
\n      改行
\r      復帰
\f      改ページ
\'      シングルクオーテーション
\"      ダブルクオーテーション
\\      \文字


エスケープシーケンスを使ったサンプルコードを確認しましょう。

public class Sample7 {
	public static void main(String[] args) {
		System.out.println("はじめまして\nこんにちは");
		System.out.println('\'');
		System.out.println("私は\"サトウ\"です");
		System.out.println("この果物の値段は\\250です");
	}
}


実行結果:

はじめまして
こんにちは
'
私は"サトウ"です
この果物の値段は¥250です

\'」は「'」という文字を記述する場合に使用します。

「'」という文字を表現するために「'''」と記述すると 2番目の「'」が文字ではなく文字の終端を表すものだと解釈され、「'」と「'」の間にも文字が記述されていないというコンパイルエラーが発生します。

\"」は文字列の中で「"」という文字を記述する場合に使用します。

「"私は"サトウ"です"」という文字列をそのまま記述すると2番目の「"」が文字ではなく文字列の終端を表すものだと解釈されます。

\"」と記述することで文字列の終端の「"」ではなく、文字の「"」と正しく解釈されるようになります。

\」という文字をエスケープシーケンスではなく単なる文字として使用したい場合には「\」の代わりに「\\」というエスケープシーケンスが用意されています。



まとめ

今回の記事ではリテラルについて紹介・解説しました。

リテラルと聞くと難しく感じると思いますが、コンピュータプログラムのソースコードなどの中に値を記述し、その値の表記の仕方を変えるとデータの型をコンピュータが自動で判別する仕組みが用意されているということです。

文字の表記の仕方など様々なことをまとめたのでぜひ覚えて有効活用しましょう!


関連記事リンク:【Java】基本的な数値処理!Mathクラスの使い方を解説!【Java】演算子(算術演算子と複合演算子)の使い方を解説! インクリメントとデクリメントの使い方!【Java】比較演算子、論理演算子、ビット演算子、シフト演算子の使い方について解説!


【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様