LoginSignup
1
1

More than 3 years have passed since last update.

【Java入門】変数と型について(変数の宣言、初期化、データ型)

Last updated at Posted at 2020-05-12

目的

Java言語を含めたプログラミングの学習を始めたばかりの方、既学習者の方は復習用に、
変数の宣言、初期化、データ型を学ぶ為に書いています。

【Java入門目次】
今回は変数と型についてです。

・変数と型 ←今ここ
型変換
変数のスコープ
文字列の操作
配列の操作
演算子
条件分岐
繰り返し処理
・クラスについて(準備中)
・抽象クラス(準備中)
・インターフェース(準備中)
・カプセル化(準備中)
・モジュールについて(準備中)
例外処理について
ラムダ式について
Stream APIについて

変数の宣言と初期化

変数とは、
プログラム内で使用するデータを保持するための入れ物。

他の変数と区別する為に、

Java言語においては、変数を宣言する際に以下を注意しなければいけません。

・数値や文字列など、どんな値が格納されるのか
・どんな名前にするのか
・最初に格納する値は何なのか

変数の宣言

データ型 変数名;
とする必要がある。
(データ型については後述します)

Main.java
class Main {
  public static void main(String args[]) {
    // 変数の宣言
    int num;

    // 出力しようとするとエラーになる
    System.out.println(num); // The local variable num may not have been initialized
  }
}

このエラーは、変数の宣言はされているが、初期化されていない、
値がセットされていない、変数を使用したために起きる。

変数の初期化

データ型 変数名;とした後、
変数名 = 値;
とする必要がある。

Main.java
class Main {
  public static void main(String args[]) {
    // 変数の宣言
    int num;

    // 変数の初期化(numに10を代入)
    num = 10;

    // 出力
    System.out.println(num); // 10
  }
}

1.変数名「num」を宣言
2.numに10を代入して初期化している。(値をセット)
3.出力

変数の宣言と初期化を同時に

データ型 変数名 = 値;
とすることも可能。

Main.java
class Main {
  public static void main(String args[]) {
    // 変数の宣言と初期化
    int num = 10;

    // 出力
    System.out.println(num); // 10
  }
}

変数名のルール

・先頭文字は以下のみ使用可能。
アルファベット(a~z、A~Z)、ドル記号($)、アンダースコア(_)

・2文字目以降は数字も使用可能。

・大文字小文字は厳密に区別される。

・文字数(長さ)の制限はない。

・null,true,falseは使用不可。

・予約語は使用不可。

予約語とは、Java言語で既に使用されている名前の事。
例:if,while,switch など

予約語について詳細:公式ドキュメント

型について

Javaでは、変数を宣言する際、データ型を指定しなければいけませんでしたね。

データ型を大別すると以下になる。

基本データ型(プリミティブ型)
参照型

それぞれを見ていきましょう。

基本データ型(プリミティブ型)

boolean型

サイズ 値の範囲
boolean 1ビット true/falseのどちらか
Main.java
class Main {
  public static void main(String args[]) {
    boolean a = true;
    boolean b = false;

    System.out.println(a); // true
    System.out.println(b); // false
  }
}

整数型

整数データを扱っています。

サイズ 値の範囲
byte 8ビット -128〜127
short 16ビット -32768~32767
int 32ビット -2147483648~2147483647
long 64ビット -9223372036854775808~9223372036854775807
Main.java

System.out.println("byteの最小値= " + Byte.MIN_VALUE); // byteの最小値= -128
System.out.println("byteの最大値= " + Byte.MAX_VALUE); // byteの最大値= 127

System.out.println("shortの最小値= " + Short.MIN_VALUE); // shortの最小値= -32768
System.out.println("shortの最大値= " + Short.MAX_VALUE); // shortの最大値= 32767

System.out.println("intの最小値= " + Integer.MIN_VALUE); // intの最小値= -2147483648
System.out.println("intの最大値= " + Integer.MAX_VALUE); // intの最大値= 2147483647

System.out.println("longの最小値= " + Long.MIN_VALUE); // longの最小値= -9223372036854775808
System.out.println("longの最大値= " + Long.MAX_VALUE); // longの最大値= 9223372036854775807

byte < short < int < long という関係ですね。

ちなみに最小値、最大値を超えると値が反転します。(桁溢れ)

Main.java

System.out.println("前 byteの最小値= " + Byte.MIN_VALUE); // byteの最小値= -128
byte minByte = Byte.MIN_VALUE;
minByte--;
System.out.println("あと byteの最小値= " +  minByte); // byteの最小値= 127 ←反転している

System.out.println("前 byteの最大値= " + Byte.MAX_VALUE); // byteの最大値= 127
byte maxByte = Byte.MAX_VALUE;
maxByte++;
System.out.println("あと byteの最大値= " + maxByte); // byteの最大値= -128 ←反転している

整数の計算をする時などに用いたりします。

Main.java

int a = 1;
int b = 1;
int sum = a + b;

System.out.println(sum); // 3

long型を使う時の注意

int型を超える整数を変数に格納する場合、末尾に「L」か「l」を付ける。

Main.java
// エラーが出る
long longNumber = 214748364712342; // The literal 214748364712342 of type int is out of range

long longNumber = 214748364712342L; // 末尾に「L」か「l」を付けなければいけない。

System.out.println(longNumber); // 214748364712342

浮動小数点型

小数点を含む数値のデータを扱っています。

サイズ 値の範囲
float 32ビット ±1.40239846×10^-45~±3.40282347×10^38
double 64ビット ±4.94065645841246544×10^-324~±1.79769313486231570×10^308
Main.java

System.out.println("floatの最小値= " + Float.MIN_VALUE); // floatの最小値= 1.4E-45
System.out.println("floatの最大値= " + Float.MAX_VALUE); // floatの最大値= 3.4028235E38

System.out.println("doubleの最小値= " + Double.MIN_VALUE); // doubleの最小値= 4.9E-324
System.out.println("doubleの最大値= " + Double.MAX_VALUE); // doubleの最大値= 1.7976931348623157E308

少数の計算をする時などに用いたりします。

Main.java

// int型の割り算
int a = 10;
int b = 3;
int result1 = a / b;

System.out.println(result1); // 3

// float型の割り算

// 浮動小数点数は、デフォルトとして、double型として認識される
// float c = 10.0; // Type mismatch: cannot convert from double to float

float c = 10F; // よって、float型の変数に代入する時は末尾にFかfををつける
float d = 3f; // 同上
float result2 = c / d;

System.out.println(result2); // 3.3333333

// double型の割り算
double e = 10.0D; // Dまたはdを末尾につける
double f = 3.0; // ただ上述の通り、デフォルトでdobule型と認識されるので省略しても問題ない
double result3 = e / f;

System.out.println(result3); // 3.3333333333333335

char型

1文字を表すのに扱うのに使われている。

データ型 サイズ 値の範囲
char 16ビット 16ビットの文字コード

1文字を扱うのに使われています。

char型を使う時の注意

シングルクォーテーションで囲うこと。
1文字ではないとダメ。

Main.java
// エラーが出る
char a = 'ああ'; // Invalid character constant
char a = "あ";  // Type mismatch: cannot convert from String to char

char a = 'あ';
System.out.println(a); // あ

参照型

クラス、配列、インターフェースなどを含む基本データ型以外の型全ては、参照型になります。

変数が値そのものを保持するのではなく、値が置いてある場所を保持する。
どこに格納されているか参照しているので参照型。

Test.java
public class Test {
  public int number = 0;
}
Main.java
class Main {
  public static void main(String args[]) {
    Test test = new Test();
    test.number = 10;
    System.out.println(test.number); // 10

    Test test2 = new Test();
    test2.number = 10;
    System.out.println(test2.number); // 10

    test = test2; // testにtest2の値を代入している訳ではなく、test2の値の置いてある場所を代入している
    test.number = 99; // よって、ここでtestを99に変更したら、test2まで変更されてしまう。

    System.out.println(test.number); // 99
    System.out.println(test2.number); // 99

  }
}

test = test2;は、
testにtest2の値を代入している訳ではなく、test2の値の置いてある場所を代入している。

test.number = 99;
よって、testを99に変更したら、test2まで変更されてしまう。

ラッパークラス

基本データ型の値を参照型として扱う事ができる。

参照型ではあるが、基本データ型と同じで値は変更されない。
値の置いてある場所ではなく、値そのものを代入している。

Main.java
class Main {
  public static void main(String args[]) {
    Integer num = 10;
    Integer num2 = 10;
    System.out.println(num); // 10
    System.out.println(num2); // 10

    num = num2;
    num = 99;
    System.out.println(num); // 99
    System.out.println(num2); // 10

    String greet = "おはよう";
    String greet2 = "こんにちは";
    System.out.println(greet); // おはよう
    System.out.println(greet2); // こんにちは

    greet = greet2;
    greet = "Good Morning";
    System.out.println(greet); // Good Morning
    System.out.println(greet2); // こんにちは
  }
}

終わりに

変数の宣言、初期化、データ型について学びました。
次回は型変換を掘り下げていこうと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1