LoginSignup
2
3

More than 3 years have passed since last update.

【Javaの基礎知識】型や変数について

Last updated at Posted at 2020-05-14

はじめに

こちらの記事は、
- Javaをこれから学習し始める
- 基本的なことをおさらいしたい

という方向けです。

基本型(プリミティブ型)

Javaで予め用意されている型で、
メモリ領域に決められた分のサイズを使って、情報を保持します。

整数のデータ型

データ型名   サイズ    値の範囲
byte 8ビット   -128~127
short 16ビット   -32768~32767
int 32ビット   -2147483648~2147483647
long    64ビット -9223372036854775808~9223372036854775807


浮動小数点数のデータ型

データ型名 サイズ 値の範囲
float 32ビット -3.4028235E+38 ~ -1.401298E-45
1.401298E-45 ~ 3.4028235E+38
double 64ビット -1.79769313486231570E+308 ~ -4.94065645841246544E-324
4.94065645841246544E-324 ~ 1.79769313486231570E+308

int型、double型、float型で計算の結果が違うのが下図でわかると思います。

    int a = 7;
    int b = 3;
    System.out.println(a / b);//出力結果=2

    double c = 7;
    double d = 3;
    System.out.println(c / d);//出力結果=2.3333333333333335

    float e = 7;
    float f = 3;
    System.out.println(e / f);//出力結果=2.3333333


文字のデータ型
1文字を格納できるデータ型です。

データ型名 サイズ 値の範囲
char 16ビット ¥u0000~¥uFFFF

Unicodeの文字コードで「A」と表示したいとき下図のようにできます。
参考サイト:Unicode版 文字コード表

    char a1 = 'A';
    char a2 = 65;
    char a3 = 0x0041;
    System.out.println(a1);//出力結果=A
    System.out.println(a2);//出力結果=A
    System.out.println(a3);//出力結果=A

char型とStirng型の注意点
char型のときは「'」で囲って、String型のときは「"」で囲みましょう。

    String s = "A";
    char c =  'A';

    エラーが出る
    String st = 'A';//Type mismatch: cannot convert from char to String
    char ch = "A";//Type mismatch: cannot convert from String to char


boolean型
格納できる値はtrueまたはfalseのいずれかだけです。

データ型名 サイズ
boolean 1ビット  true or false

下図では、aとbは等しくないため、falseと表示されます。

    boolean a = true;
    boolean b = false;
    System.out.println(a == b);//出力結果=false

データ型の使い分け

上の表にもあるようにデータ型によって、扱えるデータの範囲が異なります。
メモリの大きさを気にする必要がないぐらいメモリがある場合は、データ型を気にしなくてもなんとかなりますが、
メモリに限りがあったり、莫大なデータを扱うときは、
適切なデータ型を選んでメモリに負担をかけないよう心がけたいところですね。

ラッパークラス

Javaには、基本型の値を持つことができるクラスが用意されています。
ラッパークラスは、値型なので、代入時は値がそのまま代入されます。

基本データ型 ラッパークラス
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

int型とIntegerクラスを使った例をご覧ください。
他のラッパークラスに関しての説明は、基本型(プリミティブ型)と振る舞いが一緒なため割愛させていただきます。

    int a = 3;
    Integer b = 7;
    System.out.println(a + b);//出力結果=10
    System.out.println(b instanceof int);//Incompatible conditional operand types Integer and int
    System.out.println(b instanceof Integer);//出力結果=true

    int c = b;
    b = 8;
    System.out.println(c);//出力結果=7
    System.out.println(b);//出力結果=8

型を判定するのに「オブジェクトinstanceof 型」という方法がありますが、基本型(プリミティブ型)には使えないので注意が必要です。

Stringクラス

Stringクラスは文字列を扱うためのクラスで、参照型です。
内部に文字列を保持し、それを操作するためのメソッドを提供します。
クラスからオブジェクトを作るときは、通常new演算子を使います。
しかし、String型はnew演算子を使わず、文字列を代入するだけでいいです。

String s = "hoge";
String ns = new String("hoge");//わざわざnew演算子使わなくて良い
    String a = "イニエスタ";
    String b = a;
    System.out.println(a);//出力結果=イニエスタ
    System.out.println(b);//出力結果=イニエスタ

    b = "本田";
    System.out.println(a);//出力結果=イニエスタ
    System.out.println(b);//出力結果=本田

参照型だけど、値の振る舞いは値渡しのようになっています🤔うーん
つまり、Stringクラスの特徴として、オブジェクト自身を変更する関数がないということがわかりました。

参照型

クラス型、インターフェイス型、配列型があります。

配列型で説明していきます。

    int[] a = {1,2,3};
    int[] b = a;
    b[0] = 6;
    System.out.println(a[0]);//出力結果=6
    System.out.println(b[0]);//出力結果=6

上図にあるように、配列aの0番目が6になってしまいました。
基本型では、それぞれの「箱」の中に値が入っているのに対し、
参照型は、「同じ場所を見ている(参照している)」ということになります。
よって、同じ場所を指しているため、配列aの0番目が6になってしまうわけです。

昇格(プロモーション)

shortやbyteで計算したくても、型が違うとエラーが出てしまう時があります。
下図をご覧ください。

    short a = 4;
    short b = 6;
    short ab = a * b;//Type mismatch: cannot convert from int to short
    // ↑ shortじゃなくてintに直しなさいと怒られています
    System.out.println(ab);

    byte c = 4;
    byte d = 6;
    byte cd = c * d;//Type mismatch: cannot convert from int to short
    // ↑ byteじゃなくてintに直しなさいと怒られています
    System.out.println(cd);

解決方法は、2パターンあります(他にもあったらすみません)

    short a = 4;
    short b = 6;
    int ab = a * b;//intに変えてあげる
    System.out.println(ab);//出力結果=24

    byte c = 4;
    byte d = 6;
    byte cd = (byte) (c * d);//キャストしてあげる
    System.out.println(cd);//出力結果=24

型キャスト(型変換)

ある型から別の型に変換することをキャストといいます。

自動型変換

    int i = 7;
    double d = 3;
    System.out.println(i / d);//出力結果=2.3333333333333335
    //勝手に型が変換され、double型になっています。

強制型変換
下図では、int型同士の計算ですが、double型の計算結果を見たい場合、
どちらか一方をキャストすることで型を変えられます。

    int i = 7;
    int d = 3;
    System.out.println((double)i / d);//出力結果=2.3333333333333335

変数の宣言/定義

変数名は、データ型や入る値にふさわしい名前をつけましょう。


int number;
String name;
//データ型[半角スペース]変数名

変数の初期化

変数の宣言/定義をすると同時に値を代入することができます。
このことを「変数の初期化」といいます。

int number = 3;
String name = "イニエスタ";

変数名を決める時の注意点

良い例◎
text // 英単語であること
userId // 2語以上の場合は大文字で区切る(キャメルケース)

悪い例 or 好ましくない
1text     // 数字始まり
user_id   // アンダーバーで区切る(スネークケース)
atai      // ローマ字
        // 日本語


この記事では変換に関しては軽くしか触れてないので、
下記の記事で変換についてより詳しく触れていきます。
【Javaの基礎知識】型変換について

2
3
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
2
3