【初心者】Javaのデータ型


はじめに

Javaのデータ型と演算子についての備忘です。

1. Javaのデータ型

基本データ型ラッパークラス、あわせて関連するメソッドについてまとめておきます。

1-1. データ型一覧

Javaで用意されている基本データ型は次のようになります。
なお、最後のStringだけはデータ型ではなく、クラスオブジェクトとなります。

基本データ型 種類 サイズ 扱える範囲 ラッパークラス
byte (整数型) 1byte -128 ~ 127 Byte
short 短整数型 2byte -32,768 ~ 32,767 Short
int 整数型 4byte -2,147,483,648 ~ 2,147,483,647 Integer
long 長整数型 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 Long
float 単精度浮動小数点数型 4byte 有効桁数6桁の実数 Float
double 倍精度浮動小数点数型 8byte 有効桁数14桁の実数 Double
boolean 真偽型 1bit true 又は false Boolean
char 文字型 2byte 1文字 Character
String 文字列型 なし 最大2,147,483,647文字? -

<Stringオブジェクトの最大文字数について>
最大何文字まで格納できるかは、調べてもよく分かりませんでしたが、配列数の上限メモリの上限などに左右されるようです。

<C言語との相違点>
Javaのデータ型は、ほぼ、C言語と同じような構成になっていますが、相違点もあります。
気になったところは、次のとおりです。

C言語におけるlong型は4byteだが、Javaにおけるlong型は8byteである。そのため、Javaでは18桁までの整数を扱うことができる(C言語では9桁...という認識)。
C言語にはunsigned(符号なし整数)があるが、Javaの整数型にはunsignedは用意されていない(ただし、ラッパークラスで符号なし整数も表現できる)。

1-2. ラッパークラスについて

前述の基本データ型は、値のみ(数値リテラル、文字列リテラル)を格納します。
一方、ラッパークラスは、オブジェクト(参照型)としてデータを格納するため、様々なメソッドを使用することができます。
以下、ラッパークラスの使用例として、(個人的に)よく使いそうなメソッドを挙げておきます。

1-2-1. 数値型から文字列型への変換

数値型から文字列型に変換するには、toStringメソッドを使います。

Sample01.java
public class Sample01 {
  public static void main(String[] args) {
    int num = 10;
    String numStr = Integer.toString(num);  // toStringメソッドで文字列に変換

    System.out.println(num + 1);  // numは数値なので加算される
    System.out.println(numStr + 1);  // numStrは文字列なので文字列として結合される
  }
}
ターミナル
$ javac Sample01.java 
$ java Sample01
11
101

toStringメソッドは、数値型の全てのラッパークラスで使用できます(つまり、ByteShortIntegerLongFloatDoubleの6つ)。

1-2-2. 文字列型から数値型への変換

文字列型から数値型に変換するには、valueOfメソッドを使います。

Sample02.java
public class Sample02 {
  public static void main(String[] args) {
    String numStr = "100";
    int num = Integer.valueOf(numStr);  // valueOfメソッドで文字列に変換

    System.out.println(numStr + 1);  // numStrは文字列なので文字列として結合される
    System.out.println(num + 1);  // numは数値なので加算される
  }
}
ターミナル
$ javac Sample02.java
$ java Sample02
1001
101

1-3. Stringオブジェクトについて

これは、ラッパークラスではないですが、必要性の高いものなので挙げておきます。

1-3-1. 文字列の長さを取得する

Sample03.java
public class Sample03 {
  public static void main(String[] args) {
    String str1 = "あいうえお";  // 日本語文字列
    System.out.println(str1.length());  // 5文字

    String str2 = "abcdefg";  // 英語文字列
    System.out.println(str2.length());  // 7文字
  }
}

2. Javaの演算子

2-1. 主な演算子一覧

演算子 説明 種類
+ 加算 算術演算子
- 減算 算術演算子
* 乗算 算術演算子
/ 除算 算術演算子
% 剰余 算術演算子
++ 1加算(インクリメント) 算術演算子(単項)
-- 1減算(デクリメント) 算術演算子(単項)
+= 和の代入 代入演算子
-= 差の代入 代入演算子
*= 積の代入 代入演算子
/= 商の代入 代入演算子
& ビットAND ビット演算子
| ビットOR ビット演算子
^ ビットXOR ビット演算子
~ ビットNOT ビット演算子(単項)
<< ビット左シフト ビット演算子
>> ビット右シフト ビット演算子

2-2. ビット演算子の使い方

Bitop.java
public class Bitop {
  public static void main(String[] args) {
    int n1 = 4;  // 2進数 0100
    int n2 = 5;  // 2進数 0101
    int n;

    n = n1 & n2;  // 0100 and 0101 = 0100
    System.out.println(n);  // 4を出力

    n = n1 | n2;  // 0100 or 0101 = 0101
    System.out.println(n);  // 5を出力

    n = n1 ^ n2;  // 0100 xor 0101 = 0001
    System.out.println(n);  // 1を出力

    n = ~n1;  // ~0100 = 1011
    System.out.println(n);  // -5を出力(0100 の 2の補数)

    n = n1 << 1;  // 0100 を左に1ずらす = 1000
    System.out.println(n);  // 8を出力

    n = n1 >> 2;  // 0100 を右に2ずらす = 0001
    System.out.println(n);  // 1を出力
  }
}

メモ

個人的な備忘として限定公開にしていましたが、参照するのが面倒なので全体に公開とさせていただきました。
限定公開にした理由が思い出せないのですが、おそらく半端な記述があるように思います。
何か間違いなどあればご指摘をいただけると幸いです。