第2章 データ型

はじめに

Java言語で扱えるデータには数字や小数点や文字や文字列など様々なデータがあります。
この章では、基本的なデータの種類やデータの構造、データの使い方について学習します。

目次

  • データ型の種類
  • 変数
  • リテラル
  • 基本データ型の変換
  • 配列
  • 多次元配列
  • コマンドライン引数
  • 章のまとめ

目標

  • Java言語で扱われるデータについて理解すること

データ型

Javaプログラムで利用されるデータは、メモリに格納され、利用されます。プログラムの実行が終了すると、このデータは削除されます。

また、Javaプログラムの実行中に使用される主なデータには、リテラル変数の2つがあります。

リテラルとは、具体的な値(データ)で、変更ができない値(データ)のことです。例えば、123や4.5や”abcde”といったデータそのものを指します。

変数とはデータを一時的に格納しておくための場所のことです。箱のような形をしています。

さらにリテラル変数には種類があります。Java言語では、データの種類のことをと呼びます。
リテラル変数が利用するメモリの大きさによって、様々ながあります。

まずはについて学習していきましょう。

データ型の種類

には大きく分けて以下の2つがあります。

古くからある伝統的な型は基本データ型といいます。新しいもう一つの型はオブジェクトの概念に基づく参照型です。
図のように、基本データ型は、整数型浮動小数点型文字型論理型の4つからなります。 参照型には配列型クラス型インターフェース型の3つがあります。

ここでは主に基本データ型について解説していきます。 (参照型については、後述の項目で解説します。)

基本データ型

基本データ型は整数型文字型浮動小数点型論理型の4種類に分類されます。メモリー内のスタックという場所で扱われます。
別名primitive型(プリニティブ型)とも呼びます。

整数型

整数型少数点のつかない整数です。扱える数値の大きさによってbyte型short型int型long型に分かれます。型の指定がない場合、int型として扱われます。

int型

int型32ビット-2の31乗から2の31乗-1まで表すことができます。先頭の1ビット目は符号ビットを表します。通常、整数を扱うときはint型を使用します。
整数型を扱うときに、型の指定がない場合はint型として扱われます。

[使用例]

System.out.println(123);

byte型

byte型8ビット-2の7乗から2の7乗-1まで表すことができます。先頭の1ビット目は符号ビットを表します。10進数で-128〜127までの範囲が扱えます。小さなデータを扱う時に使用します。

[使用例]

byte b = 123;

short型

short型16ビット-2の15乗から2の15乗-1まで表すことができます。intの半分のメモリーしか使わないデータ型です。大量のメモリーを利用できるようになった現在は、あまり利用されていない型です。

[使用例]

short s = 123;

long型

long型64ビット-2の63乗から2の63乗-1まで表すことができます。int型で収まらないような巨大な整数を扱うときに使用します。
使う時には数値の末尾に「L」または「l」(小文字のエル)を付加してlong型のデータであることを明示する必要があります。

[使用例]

long l1 = 123L;
long l1 = 123l;

浮動小数点型

浮動小数点型小数点がつく整数です。実数とも言います。
扱える浮動小数点型の大きさによって、double型float型に分けられます。

double型

double型64ビットで表現します。特に理由がなければ小数点を扱うときはdouble型を使用します。
浮動小数点型を扱うときに、型の指定がない場合はdouble型として扱われます。数値の末尾に「D」または「d」を付加してもdouble型のデータとして扱われます。

[使用例]

double d1 = 123.45;
double d2 = 123.45D;
double d2 = 123.45d;

float型

float型32ビットで表現します。使用するときは末尾にFまたはfを付与します。

[使用例]

float f1 = 123.45F;
float f2 = 123.45f;

文字型

文字型は一つの文字を扱う型です。コンピュータには全ての文字列に番号が振られており、文字を整数として記憶します。

char型

char型は文字コードを保持する型です。16ビットで構成されており、使用する際は以下のようにシングルクォーテーションで文字を表現します。文字と数値を対応させたユニコード表によって表現します。実態(メモリーへ記憶される際)は数値ですので、直接数値を指定しても文字を扱うことは可能です。

[使用例]

char moji1 = 'あ';   //文字を指定する場合
char moji2 = 97;

論理型

論理型は論理を扱う型です。コンピュータはもともと論理を扱う機械です。条件判断などで非常に重要な役割を負います。

boolean型

boolean型を表す型です。値としてはtruefalseの2つしかありません。

[使用例]

boolean b1 = true;
boolean b2 = false;

変数

次に、変数について学習していきます。プログラムでは幾つかの理由から変数が必要です。

変数とは

変数とは、コンピュータの中で処理に用いる値(データ)を一時的に保存しておく場所のことで、箱(値の入れ物)のようなものです。
例えば電卓を使って「5 + 3 = 8」を計算する場合、コンピューターの中では変数が作成され、「5」と「3」が一時的に変数へ格納されます。そして、変数に格納されている「 5 」と 「3」が足し算( + )され、画面に結果が表示されます。(「 8 」が表示されます。)

変数宣言代入することによって利用することができます。

変数の宣言

変数は、使用する前にデータ型名前宣言しておく必要があります。
変数を作成する(名前をつける)ことを「変数を宣言」するといいます。

変数の宣言方法は以下です。

[構文]

データ型 変数名, 変数名 ...

[変数宣言の例1]

int a;          //int型の変数aを宣言

[変数宣言の例2]

int a , b;      //int型の変数aとbを宣言

変数へ代入

プログラムでは=は代入(代入演算子)を表します。

[構文]

変数名 =  値 や 式

[変数代入の例1(値を代入)]

int a;      //int型の変数aをint型へ宣言
a = 10; //変数aへ10(int型のリテラル)を代入

変数代入する具体的な値(データ)リテラルといいます。上記の例の場合10リテラルです。

変数値(データ)代入する際は、原則、変数の宣言時に指定した型同じ種類の値(データ型)でなければなりません。

[変数代入の例2(式の結果を代入)]

int a, b;       //int型の変数aとbを宣言
a = 10; //変数aへ10(int型のリテラル)を代入
b = a + 1; //変数a足す1の計算結果を変数bへ代入

例題(変数)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable1
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable1 {
/**
* mainメソッド
*/
public static void main(String[] args) {
int number;      //int型の変数numberを宣言
number = 10;      //numberに10を代入
number = 20;      //numberに20を再代入
number = number + 1;    //numberに1を足す
System.out.println(number);    //numberを表示する
}

}

コンパイル例:

> javac chapter2¥Variable1.java

実行例:

> java chapter2.Variable1
21

変数の宣言+代入(初期化)

変数の宣言同時代入を行うことを初期化といいます。

[構文(変数宣言と代入(初期化))]

データ型 変数名 =  値 or 式など

[変数の宣言と代入の例1(値)]

int a = 10;
int b = 20;

[変数の宣言と代入の例2(式)]

int a = 10
int b = a + 10;

[変数の宣言と代入の例3(複数の宣言で一部の変数のみを初期化)]

int a = 10 , b , c

例題(変数の初期化)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable2
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable2 {
/**
* mainメソッド
*/
public static void main(String[] args) {
int number = 10; //変数の初期化
number = number + 1;   //numberに1を足す
System.out.println(number);   //numberを表示する
}

}

コンパイル例:

> javac chapter2¥Variable2.java

実行例:

> java chapter2.Variable2
11

変数の命名規則

変数名はプログラマーが自由につけることができます。プログラマーが自由につけることができる名前のことを識別子といいます。

識別子に使える文字列は以下です。

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
_$0123456789

識別子の書き方には以下の規則があります。

  • 数字から始まってはならない(先頭文字は数字以外)
  • 英字の大文字と小文字は異なる文字として扱われる
  • 予約語は使えない
  • 名前の長さに事実上制限はない

予約語

予約語とは、Java言語の中でキーワードとして予約されている言語です。
宣言や処理を記述するために使われる特別なキーワードです。

主な予約語は以下です。

abstract    assert    boolean    break    byte    case    catch    char    class    const    continue    default    do    double    else    enum    extends    final    finally    float    for    goto    if    implements    import    instanced    int    interface    long   native    new    package    private    protected    public    return    short    static    strictfp    super    switch    synchronized    this    throw    transient    try    void    volatile  while

※予約語であっても文字の一部が大文字にしたり、識別子の一部として使うのであれば問題なく利用できます。

識別子の慣用

識別子の作り方としては以下のような慣用があります。

  • 基本的には小文字を使う
  • 2つ以上の単語を連ねる場合には2つ目以降の単語の先頭文字を大文字にする(キャメル記法)
  • 2つ以上の単語を連ねる場合には2つ目以降の単語は_(アンダーバー)でつなぐ(スネーク記法)

変数名とクラス名の慣用

変数名とクラス名の名前の付け方にも慣用があります。

クラス名
  • 基本的に小文字を使う
  • 先頭文字を大文字にする
変数名・パッケージ名など
  • 基本的に小文字を使う
  • 先頭文字を小文字にする

変数の名前の付け方の事例

変数名 説明
taxValue 税額
employee_Name 社員名
totalFree 合計金額

リテラル

リテラルとは、数字や文字を直接ソースプログラム内で表現し、変更できないデータのことです。

リテラルの種類

Java言語で利用できるリテラルの種類は以下のとおりです。

種類 説明
整数リテラル 少数部を持たない数値のこと 123、0b001101、0123、0xFF
浮動小数点リテラル 少数部を持つ数値のこと 1.41431256、123e-2
真偽値リテラル 真または偽を表現するためのデータ true、false
文字リテラル 1文字を表現するためのデータ ‘a’、’A’、’¥u0041’
文字列リテラル 文字列を表現するためのデータ “おはよう”、”Hello”

整数リテラル

10進数だけではなく、16進数、8進数、2進数のリテラルを使うことができます。

種類 例示 説明
10進数 127 、 127L、127l Lまたはlを末尾に付与するとlong型とみなされる。何もつけないとint型とみなされる。
16進数 0x7f、0X7F 先頭に0xまたは0Xを付ける。
8進数 0177 先頭に0を付ける。
2進数 0b01111111、0B01111111 先頭に0bまたは0Bを付ける。

例題(整数リテラル)

コンソールに整数リテラルを出力してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable3

ソースコード:

package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable3 {
/**
* mainメソッド
*/
public static void main(String[] args) {
System.out.println(127); //10進数
System.out.println(127L); //10進数(long型)
System.out.println(127l); //10進数(long型)
System.out.println(0x7f); //16進数
System.out.println(0X7F); //16進数
System.out.println(0177); //8進数
System.out.println(0b01111111); //2進数
System.out.println(0B01111111); //2進数
}
}

コンパイル例:

> javac chapter2¥Variable3.java

実行例:

> java chapter2.Variable3
127
127
127
127
127
127
127
127

浮動小数点リテラル

小数点の付く値ですが、eまたはEを使って指数形式でも表記できます。

種類 例示 書き方
10進数表記 12.34、12.34f、12.34F、12.34d、12.34D 末尾にdまたはDを付けるとdouble型とみなされる。末尾にfまたはFを付けるとfloat型とみなされる。何もつけないとdouble型とみなされる。
指数表記 1234e-2 eまたはEで指数を表す。

例題(浮動小数点リテラル)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable4
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable4 {
/**
* mainメソッド
*/
public static void main(String[] args) {
System.out.println(12.34); //10進数表記
System.out.println(12.34f); //10進数表記(float型)
System.out.println(12.34F); //10進数表記(float型)
System.out.println(12.34d); //10進数表記(double型)
System.out.println(12.34D); //10進数表記(double型)
System.out.println(1234e-2); //指数表記
}

}

コンパイル例:

> javac chapter2¥Variable4.java

実行例:

> java chapter2.Variable4
12.34
12.34
12.34
12.34
12.34
12.34

文字リテラル

文字リテラルは1つの文字を表します。プログラムでは文字を'(一重引用符)で囲うか、ユニコード(Unicode)で表現します。ユニコードで表現する場合も'(一重引用符)で囲う必要があることに注意してください。

種類 例示 書き方
文字 ‘あ’、’a’、’日’ 文字を「’」で囲う。
文字コード ‘¥u0061’ ユニコードを「’」で囲う。

ユニコード(Unicode)は世界中の国の文字を1つの体系にまとめたもので、世界標準の文字コード体系です。

ユニコード(Unicode)表

※char型の変数へ整数リテラル(10進数、8進数、16進数)を代入し、ユニコード(Unicode)表に沿って文字リテラルとして
扱うことも可能です。

以下の文字リテラルは全て同じ文字「a」を表します。

char c;         
c = 'a'; //文字'a'
c = '¥u0061'; //文字'a'の文字コード
c = 97; //10進数の整数による文字'a'の文字コード
c = 0141; //8進数の整数による文字'a'の文字コード
c = 0x61; //16進数の整数による文字'a'の文字コード

エスケープシーケンス

文字リテラルにはエスケープシーケンスという特殊な文字もあります。「 ¥ 」(Windowsの場合)もしくは「 \ 」(Mac)と組み合わせて1つの文字を表します。

文字 文字コード 意味
¥n 0x0A 改行
¥r 0x0D 復帰(行頭に戻る。)
¥t 0x09 タブ文字
¥b 0x08 バックスペース
¥¥ 0x5C ¥記号
¥’ 0x27 ‘(一重引用符)
¥” 0x22 “(二重引用符)

例題(文字リテラル)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable5
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable5 {
/**
* mainメソッド
*/
public static void main(String[] args) {
System.out.println('あ'); //文字「あ」
System.out.println('b'); //文字「b」
System.out.println('日'); //文字「日」
System.out.println('¥u0041'); //ユニコード0041(文字「a」)
System.out.println('¥¥'); //記号「¥」
System.out.println('¥''); //'(一重引用符)
System.out.println('¥"'); //"(二重引用符)
}

}

コンパイル例:

> javac chapter2¥Variable5.java

実行例:

> java chapter2.Variable5

b

a
¥
'
"

文字列リテラル

“こんにちは”のように文字列(複数の文字)を"(2重引用符)で囲ったものです。

種類 例示 書き方
文字列 “ああああ”、”AAAAAA” 文字列を「”」で囲う。
空文字 “” “を2つ連続して書くと、空の文字列になる。

例題(文字列リテラル)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable6
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable6 {
/**
* mainメソッド
*/
public static void main(String[] args) {
System.out.println("ああああ"); //文字列
System.out.println("AAAAAA"); //文字列
System.out.println(""); //空の文字列
}

}

コンパイル例:

> javac chapter2¥Variable6.java

実行例:

> java chapter2.Variable6
ああああ
AAAAAA

論理値リテラル

論理値は、true(真)とfalse(偽)のどちらかしかありません。関係式の値(判定結果)を表します。
“true”のように引用符で囲まないように注意してください。

例題(論理値リテラル)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable7
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable7 {
/**
* mainメソッド
*/
public static void main(String[] args) {
System.out.println(true); //真
System.out.println(false); //偽
System.out.println("true"); //二重引用符で囲むと文字列になる
}

}

コンパイル例:

> javac chapter2¥Variable7.java

実行例:

> java chapter2.Variable7
true
false
true

4. 基本データ型の変換

リテラルを変数に代入する場合、必ずしも同じ型にしなければならないということは不便なので、暗黙の型変換キャスト(明示的な型変換)いう、ある程度融通のきくような仕組みがあります。

基本データ型の変換には、暗黙の型変換とキャストの2種類があります。

暗黙の型変換

表現可能な値の範囲が小さい型のデータを大きい型の変数に代入するときは、自動的に型が変換されます。これを暗黙の型変換といいます。

例えば、次のようにlong型やdouble型の変数へint型の値を代入してもエラーにはなりません。

long l = 10;    //10Lに自動的に型が変換されてlへ代入される
double d = 10; //10.0に自動的に型が変換されてdへ代入される

また、暗黙の型変換はの中でも行われます。

double d = 1.2;
double x = d * 2; //2は2.0に自動的に型が変換されて計算に使われる

暗黙の型変換が行われるのは変換しても情報の損失がないケースに限られます。情報の損失がある場合には変換できません。

int i = 10.2;   //10.2の小数点以下が失われるので、コンパイルエラーになる

暗黙の型変換が可能なケースは以下です。

  • 整数型ではビット幅の小さい型からより大きな型へ暗黙の型変換ができる。
  • 整数型は浮動小数点型へ暗黙の型変換ができる。
  • char型のデータは、int型へ暗黙の型変換ができる。
  • float型のデータは、double型へ暗黙の型変換ができる。

例題(暗黙の型変換)

以下をコーディングし、実行結果を確認してみましょう。

名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable8
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable8 {
/**
* mainメソッド
*/
public static void main(String[] args) {

double number = 10; //10.0へ暗黙の型変換されてnumberへ代入される。

double x = 3.5;
double y = x + 2; //2は2.0へ暗黙の型変換されて計算に使われる。

// int z = 12.345; //コンパイルエラーになる。

System.out.println(number);
System.out.println("y:" + y);
}

}

コンパイル例:

> javac chapter2¥Variable8.java

実行例:

> java chapter2.Variable8
y:5.5

キャスト(明示的な型変換)

自動変換ができないのは、情報の損失が発生する場合ですが、強制的にプログラマの責任で型を変換する方法があります。
その操作のことをキャスト(明示的な型変換)といいます。

キャストをおこなう場合には、キャスト演算子を使用します。

[キャスト演算子の形式]

(キャストしたい型)データ ;

[例]

double  d = 3.14 ;
int i1 = (int)d ;   // double型の変数dをint型の変数i1へキャストして代入
int i2 = d ;  // double型の変数dをint型の変数i2へキャストしないで代入することはできない

例えば、先ほど暗黙の型変換をおこなったときに以下の場合はコンパイルエラーでした。

int i = 10.2;   //10.2の小数点以下が失われるので、コンパイルエラーになる

キャスト演算子を使用するとコンパイルエラーを回避することができます。

int i = (int)10.2;  //10.2をint型へ強制的に変換し、int型の変数iへ代入する

尚、以下の場合はキャストすることができません。

  • boolean型はどのような型にもキャストできません。
  • String型は基本データ型へキャストできません。

例題(キャスト(明示的な型変換))

以下をコーディングし、実行結果を確認してみましょう。

名前
プロジェクト alj_study
パッケージ chapter2
クラス Variable9
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class Variable9 {
/**
* mainメソッド
*/
public static void main(String[] args) {

int i = (int)97.6; //doubleをintへキャスト
double d = (double)i; //intをdoubleへキャスト
byte b = (byte)d; //doubleをbyteへキャスト
char c = (char)b; //byteをcharへキャスト
int a = (int)(99 * 99.9); //計算式もキャスト出来る

System.out.println(i);
System.out.println(d);
System.out.println(b);
System.out.println(c);
System.out.println(a);

}

}

コンパイル例:

> javac chapter2¥Variable9.java

実行例:

> java chapter2.Variable9

配列

配列は、同じデータ型のデータ効率良く扱うことができるデータ構造です。
イメージとしては以下のような形です。

配列は、配列要素配列要素番号で構成されています。

※尚、配列要素番号のことをインデックス番号配列添字ともいいます。

配列の使用方法

配列を使用するためには、まず最初に、配列を宣言しなくてはいけません。宣言は次のように行います。

[構文]

型名[] 配列名;

変数の場合は、宣言するだけで一つの値を格納できる場所が確保されましたが、配列の場合、new演算子を利用して、配列オブジェクトというものを生成する必要があります。生成した配列オブジェクトを宣言した配列名へ代入し、初めて利用することができます。

[構文]

型名[] 配列名;
配列名 = new 型名[要素数];

[例(配列名aを宣言し要素数を5つ確保する場合)]

int[] a;
a = new int[7];

各要素へ値(データ)を代入する場合は、以下になります。

[構文]

配列名[要素番号] = 値(データ);

[例(配列名aの要素番号0から6へ代入する場合)]

a[0] = 123;
a[1] = 2;
a[2] = 300;
a[3] = 999;
a[4] = 30;
a[5] = 554;
a[6] = 876;

宣言する時に代入する値が決まっている場合(初期化する場合)には、以下のように{}で値を指定します。

[構文]

型名[] 配列名 = {リテラルのリスト};

[例(配列名aを宣言し要素へ「123」、「2」、「300」、「999」、「30」、「554」、「876」を代入する場合)]

int[] a = { 123, 2, 300, 999, 30, 554, 876};

{から}の間に配列の中に入れたい要素をカンマ区切りで記載します。

※ 配列は配列型という一つの型(参照型)です。

利用したい場合は以下のようにします。

[構文]

配列名[要素番号]

[例(配列名a(要素数が7)の要素をコンソールへ出力する場合)]

System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
System.out.println(a[4]);
System.out.println(a[5]);
System.out.println(a[6]);

例題(配列)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス ArrayExec
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class ArrayExec {
/**
* mainメソッド
*/
public static void main(String[] args) {

//配列を初期化
int[] a = { 1 , 2 , 3 , 4 , 5 };
double[] b = { 1.1 , 1.2 , 1.3 , 1.4 , 1.5 };
char[] c = { 'お' , 'は' , 'よ' , 'う' };
String[] d = { "おはよう" , "こんにちは" , "こんばんは" , "さようなら"};
boolean[] e = { true , true , false , true };

//配列の要素番号0を出力する
System.out.println(a[0]);
System.out.println(b[0]);
System.out.println(c[0]);
System.out.println(d[0]);
System.out.println(e[0]);

}

}

コンパイル例:

> javac chapter2¥ArrayExec.java

実行例:

> java chapter2.ArrayExec
1
1.2

おはよう
true

多次元配列

配列の要素へ配列を代入することも可能です。

int[][] x = { { 10 , 2, 4, 9, 8, 7, 5 } , { 7, 2, 5, 4, 3 } };

このような配列を多次元配列2次元配列配列の配列という。

多次元配列を利用する場合は以下のように指定します。

int[][] x = { { 10 , 2, 4, 9, 8, 7, 5 } , { 7, 2, 5, 4, 3 } };
System.out.println(x[0][0]); // 10
System.out.println(x[0][1]); // 2
System.out.println(x[0][2]); // 4
System.out.println(x[0][3]); // 9
System.out.println(x[0][4]); // 8
System.out.println(x[0][5]); // 7
System.out.println(x[0][6]); // 5
System.out.println(x[1][0]); // 7
System.out.println(x[1][1]); // 2
System.out.println(x[1][2]); // 5
System.out.println(x[1][3]); // 4
System.out.println(x[1][4]); // 3

要素の数を指定する場合は以下のように指定します。

int[][] x = { { 10 , 2, 4, 9, 8, 7, 5 } , { 7, 2, 5, 4, 3 } };
System.out.println(x.length); // 2
System.out.println(x[0].length); // 7
System.out.println(x[1].length); // 5

※多次元配列を利用する場合は、後述の章で説明するfor文のネストと組み合わせることで、
効率よく利用することが可能です。

コマンドライン引数

Javaプログラムは、コマンドライン上で指定したデータを、入力データとして扱うことができます。これをコマンドライン引数と呼びます。

コマンドラインより渡されたデータは、文字列型(String型)の配列として配列名argsへ代入されます。

例題(コマンドライン引数(文字列として利用する場合))

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス CommondLineExec1
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class CommondLineExec1 {
/**
* mainメソッド
*/
public static void main(String[] args) {

System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
System.out.println(args[3]);

}

}

コンパイル例:

> javac chapter2¥CommondLineExec1.java

実行例:

> java chapter2.CommondLineExec1 abc 123 3.45 こんばんは
abc
123
3.45
こんばんは

コマンドライン引数の変換

コマンドラインより渡されたデータを文字列型(String型)以外のデータ型として扱うには変換が必要です。
String型から数値型への変換を行う場合には、以下のメソッドを利用します。

Integer.parseInt()
Double.parseDouble()
Float.parseFloat()
Long.parseLong()

メソッドに関しては後述の章で説明します。
ここでは文字列(String型)からint型へ変換するときに利用するInteger.parseInt()メソッドの使い方のみ理解してください。

[Integer.parseInt()メソッドの構文]

int 変数名 = Integer.parseInt(int型へ変換したいString型のデータ);

例題(コマンドライン引数の変換)

以下をコーディングし、実行結果を確認してみましょう。

項目 名前
プロジェクト alj_study
パッケージ chapter2
クラス CommondLineExec2
package chapter2;
/**
* 実行するためのクラス
* @version 1.0
* @author Yamamoto
*/
public class CommondLineExec2 {
/**
* mainメソッド
*/
public static void main(String[] args) {

System.out.println(args[0]);

int num1 = Integer.parseInt(args[1]); //String型のデータをint型のデータへ変換し、num1へ代入
int num2 = Integer.parseInt(args[2]); //String型のデータをint型のデータへ変換し、num2へ代入
int result = num1 + num2; //変数num1と変数num2を足して変数resultへ代入
System.out.println("result : " + result );

}

}

コンパイル例:

> javac chapter2¥CommondLineExec2.java

実行例:

> java chapter2.CommondLineExec2 abc 100 400
abc
result : 500

章のまとめ

以下の要点を理解できたら次の章へ進んでください。

データ型

  • データ型とはJavaプログラム内で使用されるデータの種類を表す形である。
  • データ型には、文字や数値を扱う基本データ型とオブジェクトを扱う参照型がある。
  • 基本データ型として整数型(byte、short、int、long)、浮動小数点型(float、double)、文字型(char)、論理型(boolean)がある。
種類 データ型 読み方 ビット幅 扱える値の範囲 使用例
整数 byte バイト 8 -2の7乗〜2の7乗-1 byte b = 10;
byte b = 10;
整数 short ショート 16 -2の15乗〜2の15乗-1 short s = 20;
整数 int イント 32 -2の31乗〜2の31乗-1 int i = 30;
整数 long ロング 64 -2の63乗〜2の63乗-1 long l = 40L;
long l = 40l;
浮動小数点 float フロート 32 - float f = 1.15F;
float f = 1.15f;
浮動小数点 double ダブル 64 - double d = 1.25;
文字 char チャー 16 -20〜2の16乗-1 char c = ‘A’;
char c = 97;
真偽値 boolean チャー - true
false
boolean b = true;

変数

  • 変数とは、コンピュータの中で処理に用いる値(データ)を一時的に保存しておく場所のことである。
  • 変数にはリテラルを代入できる。
  • =代入を表す。
  • 識別子にはルール(規則)がある。また慣用がある。
  • 変数に代入する値は同じ型でなければならない。

リテラル

  • リテラルとは、データそのもののことで、変更ができないデータのこと

整数リテラル

  • 10進数だけではなく、16進数8進数2進数のリテラルを使うことができる
  • 16進数を表す場合、先頭に0xまたは0Xを付ける
  • 8進数を表す場合、先頭に0を付ける
  • 2進数を表す場合、先頭に0bまたは0Bを付ける

浮動小数点リテラル

  • 小数点の付く値のこと、eまたはEを使って指数形式でも表記可能
  • 末尾にfまたはFを付けるfloat型とみなされる
  • 末尾にdまたはDを付けるdouble型とみなされる
  • 何もつけないdouble型とみなされる

文字リテラル

  • 1つの文字を表す
  • 文字表記の場合、文字を'(一重引用符)で囲う
  • 文字コード表記の場合、ユニコード(Unicode)’(一重引用符)で囲う
  • ユニコード(Unicode)は世界中の国の文字を1つの体系にまとめたもの
  • 文字リテラルにはエスケープシーケンスいう特殊な文字がある
  • 「¥」と組み合わせて1つの文字を表す
  • エスケープシーケンスも文字を'(一重引用符)で囲う

文字列リテラル

  • 1文字列(複数の文字)を"(2重引用符)で囲ったもの
  • “を2つ連続して書くと、空の文字列になる

論理値リテラル

  • 論理値は、true(真)false(偽)のどちらかしかない
  • 関係式の判定結果を表す
  • ある関係式の判定結果が「真」の場合、trueを表記する
  • ある関係式の判定結果が「偽」の場合、falseを表記する

基本データ型の変換

  • 基本データ型の変換には、暗黙の型変換キャストの2種類がある
  • 表現可能な値の範囲が小さい型のデータを大きい型の変数に代入するときは、暗黙の型変換が行われ、その逆はキャストする必要がある
  • char型のデータはint型自動的に変換される

配列

  • 配列は、同じデータ型のデータを効率良く扱うことができるデータ構造である
  • 配列は、配列要素配列要素番号(配列添え字)で構成されている
  • 配列は、参照型(配列型)の一種で、メモリのヒープ領域に作成される
  • 配列を使用するためには、配列の宣言し、配列型オブジェクト生成する必要がある
  • 配列型オブジェクトを生成するためには、new演算子を使用する
  • 宣言する時に代入する値が決まっている場合には、{ 配列リスト } を指定する
  • { から } の間に配列の中に入れたい要素をカンマ区切りで記載する
  • 利用したい場合は、配列名[要素番号] を指定する

コマンドライン引数

  • コマンドライン上で指定したデータは、文字列型(String型)のデータとして配列名argsへ代入される
  • 文字列型(String型)のデータをint型へ変換するためには、Integer.parseInt()メソッドを利用する