Java 基本データ型

変数は値を格納するためにメモリを確保することです。つまり、変数を作成するときは、メモリに領域を確保する必要があります。

メモリ管理システムは変数の型に基づいて変数にストレージ領域を割り当て、割り当てられた領域はその型のデータを格納するためだけに使用できます。

したがって、異なる型の変数を定義することで、メモリに整数、小数、または文字を格納できます。

Java の2大データ型:

  • 組み込みデータ型
  • 参照データ型

組み込みデータ型

Java言語は8つの基本型を提供します。6つの数値型(4つの整数型、2つの浮動小数点型)、1つの文字型、そして1つのブール型です。

byte:

  • byte データ型は8ビット、符号付きで、2の補数で表される整数です;
  • 最小値は-128(-2^7);
  • 最大値は127(2^7-1);
  • デフォルト値は0;
  • byte 型は大きな配列でスペースを節約するために使用され、主に整数の代わりとなります。byte 変数が占有するスペースは int 型の4分の1だけだからです;
  • 例:byte a = 100、byte b = -50。

short:

  • short データ型は16ビット、符号付きの2の補数で表される整数です
  • 最小値は-32768(-2^15);
  • 最大値は32767(2^15 - 1);
  • short データ型も byte と同様にスペースを節約できます。short 変数は int 型変数が占有するスペースの2分の1です;
  • デフォルト値は0;
  • 例:short s = 1000、short r = -20000。

int:

  • int データ型は32ビット、符号付きの2の補数で表される整数です;
  • 最小値は-2,147,483,648(-2^31);
  • 最大値は2,147,483,647(2^31 - 1);
  • 一般に整数型変数のデフォルトは int 型です;
  • デフォルト値は0 ;
  • 例:int a = 100000、int b = -200000。

long:

  • long データ型は64ビット、符号付きの2の補数で表される整数です;
  • 最小値は-9,223,372,036,854,775,808(-2^63);
  • 最大値は9,223,372,036,854,775,807(2^63 -1);
  • この型は主に比較的大きな整数を必要とするシステムで使用されます;
  • デフォルト値は0L;
  • 例:long a = 100000L,long b = -200000L。
    "L"は理論上、大文字と小文字は区別されませんが、"l"と書くと数字の"1"と混同しやすく、区別しにくくなります。そのため、大文字にするのが最善です。

float:

  • float データ型は単精度、32ビット、IEEE 754 標準に準拠した浮動小数点数です;
  • float は大きな浮動小数点配列を格納する際にメモリ領域を節約できます;
  • デフォルト値は0.0f;
  • 浮動小数点数は、通貨などの正確な値を表すために使用できません;
  • 例:float f1 = 234.5f。

double:

  • double データ型は倍精度、64ビット、IEEE 754 標準に準拠した浮動小数点数です;
  • 浮動小数点数のデフォルト型は double 型です;
  • double 型も同様に、通貨などの正確な値を表すことはできません;
  • デフォルト値は0.0d;
  • 例:

    double   d1  = 7D ;
    double   d2  = 7.; 
    double   d3  =  8.0; 
    double   d4  =  8.D; 
    double   d5  =  12.9867; 

    7 は int リテラルであり、7D、7.、8.0 は double リテラルです。

boolean:

  • boolean データ型は1ビットの情報を表します;
  • 取り得る値は true と false の2つだけです;
  • この型は true/false の状況を記録するためのフラグとしてのみ使用されます;
  • デフォルト値はfalse;
  • 例:boolean one = true。

char:

  • char 型は単一の16ビット Unicode 文字です;
  • 最小値は\u0000(10進数相当値は 0);
  • 最大値は\uffff(すなわち 65535);
  • char データ型は任意の文字を格納できます;
  • 例:char letter = 'A';。

例

数値型の基本型の値の範囲については、対応するラッパークラスに定数として定義されているため、無理に覚える必要はありません。次の例を見てください:

例

public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本型:byte のビット数:" + Byte.SIZE); System.out.println("ラッパークラス:java.lang.Byte"); System.out.println("最小値:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大値:Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short System.out.println("基本型:short のビット数:" + Short.SIZE); System.out.println("ラッパークラス:java.lang.Short"); System.out.println("最小値:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大値:Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int System.out.println("基本型:int のビット数:" + Integer.SIZE); System.out.println("ラッパークラス:java.lang.Integer"); System.out.println("最小値:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大値:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("基本型:long のビット数:" + Long.SIZE); System.out.println("ラッパークラス:java.lang.Long"); System.out.println("最小値:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大値:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("基本型:float のビット数:" + Float.SIZE); System.out.println("ラッパークラス:java.lang.Float"); System.out.println("最小値:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大値:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("基本型:double のビット数:" + Double.SIZE); System.out.println("ラッパークラス:java.lang.Double"); System.out.println("最小値:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大値:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("基本型:char のビット数:" + Character.SIZE); System.out.println("ラッパークラス:java.lang.Character"); //Character.MIN_VALUE を文字形式ではなく数値形式でコンソールに出力する System.out.println("最小値:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); //Character.MAX_VALUE を文字形式ではなく数値形式でコンソールに出力する System.out.println("最大値:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } }

サンプルを実行 »

上記のコードをコンパイルして実行すると、出力結果は次のようになります:

基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127

基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767

基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807

基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38

基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308

基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535

Float と Double の最小値と最大値は科学的記数法で出力されます。末尾の "E+数字" は、Eの前の数字に10の何乗を掛けるかを表します。例えば 3.14E3 は 3.14 × 103=3140、3.14E-3 は 3.14 x 10-3 =0.00314。

実際、JAVAにはもう1つの基本型 void が存在し、それに対応するラッパークラス java.lang.Void もありますが、それらを直接操作することはできません。

型のデフォルト値

次の表に Java の各型のデフォルト値を示します:

データ型デフォルト値
int0
long0L
short0
char'\u0000'
byte0
float0.0f
double0.0d
booleanfalse
参照型(クラス、インターフェース、配列)null

説明:

  • int, short, long, byteのデフォルト値は0です。
  • charのデフォルト値は\u0000(空文字)。
  • floatのデフォルト値は0.0f。
  • doubleのデフォルト値は0.0d。
  • booleanのデフォルト値はfalse。
  • 参照型(クラス、インターフェース、配列)のデフォルト値はnull。

例

public class Test { static boolean bool; static byte by; static char ch; static double d; static float f; static int i; static long l; static short sh; static String str; public static void main(String[] args) { System.out.println("Bool :" + bool); System.out.println("Byte :" + by); System.out.println("Character:" + ch); System.out.println("Double :" + d); System.out.println("Float :" + f); System.out.println("Integer :" + i); System.out.println("Long :" + l); System.out.println("Short :" + sh); System.out.println("String :" + str); } }

サンプルの出力結果は次のとおりです:

Bool     :false
Byte     :0
Character:
Double   :0.0
Float    :0.0
Integer  :0
Long     :0
Short    :0
String   :null

参照型

  • Javaでは、参照型の変数はC/C++のポインタに非常に似ています。参照型はオブジェクトを指し、オブジェクトを指す変数は参照変数です。これらの変数は宣言時に Employee、Puppy などの特定の型として指定されます。変数は一度宣言されると、型を変更することはできません。
  • オブジェクトと配列はどちらも参照データ型です。
  • すべての参照型のデフォルト値は null です。
  • 参照変数は、それと互換性のある任意の型を参照するために使用できます。
  • 例:Site site = new Site("サンプル")。

Java 定数

定数はプログラムの実行中に変更することはできません。

Java では final キーワードを使用して定数を定義します。宣言方法は変数と似ています:

final double PI = 3.1415927;

定数名は小文字でもよいが、識別しやすいように、通常は大文字で定数を表す。

リテラルは任意の組み込み型の変数に代入できます。例:

byte a = 68;
char a = 'A'

byte、int、long、shortはすべて、10進数、16進数、8進数で表すことができます。

リテラルを使用するとき、接頭辞0は8進数を表し、接頭辞0xは16進数を表します。例:

int decimal = 100;
int octal = 0144;
int hexa =  0x64;

他の言語と同様に、Javaの文字列定数も2つの引用符の間に含まれる文字シーケンスです。以下は文字列型リテラルの例です:

"Hello World"
"two\nlines"
"\"This is in quotes\""

文字列定数と文字変数はどちらも任意のUnicode文字を含むことができます。例:

char a = '\u0001';
String a = "\u0001";

Java言語はいくつかの特別なエスケープ文字シーケンスをサポートしています。

記号 文字の意味
\n 改行 (0x0a)
\r 復帰 (0x0d)
\f 改ページ (0x0c)
\b バックスペース (0x08)
\0 ヌル文字 (0x0)
\s スペース (0x20)
\t タブ文字
\" 二重引用符
\' 単一引用符
\\ バックスラッシュ
\ddd 8進数文字 (ddd)
\uxxxx 16進数Unicode文字 (xxxx)

自動型変換

整数型、実数型(定数)、文字型データは混合演算できます。演算中、異なる型のデータはまず同じ型に変換されてから演算が行われます。

変換は低レベルから高レベルへ行われます。

低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double 

データ型変換は次のルールを満たす必要があります:

  • 1. boolean型に対して型変換を行うことはできません。

  • 2. オブジェクト型を無関係なクラスのオブジェクトに変換することはできません。

  • 3. 容量の大きい型を容量の小さい型に変換する場合は、必ず強制型変換を使用しなければなりません。

  • 4. 変換中にオーバーフローや精度の損失が発生する可能性があります。例:

    int i =128;   
    byte b = (byte)i;
    

    byte型は8ビットで最大値が127のため、intをbyte型に強制変換すると、値が128の場合にオーバーフローが発生します。

  • 5. 浮動小数点数から整数への変換は、四捨五入ではなく小数を切り捨てることによって行われます。例:

    (int)23.7 == 23;        
    (int)-45.89f == -45
    

自動型変換

変換前のデータ型のビット数が変換後のデータ型より低くなければなりません。例:shortデータ型のビット数は16ビットなので、ビット数が32のint型に自動変換できます。同様にfloatデータ型のビット数は32なので、64ビットのdouble型に自動変換できます。

例

public class ZiDongLeiZhuan{ public static void main(String[] args){ char c1='a';//char型を定義する int i1 = c1;//charがintに自動型変換される System.out.println("charがintに自動型変換された後の値は次と等しい"+i1); char c2 = 'A';//char型を定義する int i2 = c2+1;//char型とint型の計算 System.out.println("char型とintの計算後の値は次と等しい"+i2); } }

実行結果は次のとおりです:

char自动类型转换为int后的值等于97
char类型和int计算后的值等于66

解説:c1の値は文字aであり、ASCIIコード表を調べると対応するint型の値は97、Aに対応する値は65であることがわかるため、i2=65+1=66。

強制型変換

  • 1. 条件は、変換するデータ型が互換性を持っていることです。

  • 2. 形式:(type)value typeは強制型変換後のデータ型です 例:

    例

    public class ForceTransform { public static void main(String[] args){ int i1 = 123; byte b = (byte)i1;//byteへの強制型変換 System.out.println("intをbyteに強制型変換した後の値は次と等しい"+b); } }

    実行結果:

    int强制类型转换为byte后的值等于123
    

暗黙の強制型変換

  • 1. 整数のデフォルト型はintです。

  • 2. 小数のデフォルトはdouble型の浮動小数点型です。float型を定義するときは、数字の後にFまたはfを付けなければなりません。

この節ではJavaの基本データ型について説明しました。次の節では、さまざまな変数型とその使い方について説明します。

その他の拡張