変数は、値を格納するためにメモリを申請することです。 つまり、変数を作成する時、メモリ内のスペースを申請する必要があります。
メモリ管理システムは、変数の型に応じてストレージスペースを割り当てます。割り当てられたスペースは、その型のデータを格納するためにのみ使用できます。
したがって、異なる型の変数を定義することにより、整数、小数、または文字をメモリに格納できます。
Javaの2つの主なデータ型:
- プリミティブ型
- 参照型
目次
プリミティブ型
Java言語には、8つの基本データ型があります。 6つは数値型であり(4つは整数型で、2つは浮動小数点型です)、1つは文字型であり、もう1つはブール型です。
byte:
- バイト型は8ビット、符号付き、2の補数で表される整数です。
- 最小値は
-128(-2^7)
です。 - 最大値は
127(2^7-1)
です。 - デフォルト値は
0
です。 - バイト変数が占めるスペースはint型の4分の1しかないため、バイト型は大きな配列のスペースを節約するために使用され、主に整数を置き換えます。
- 例えば:byte a = 100,byte b = -50。
short:
- short型は16ビット、符号付き、2の補数で表される整数です。
- 最小値は
-32768(-2^15)
です。 - 最大値は
32767(2^15 - 1)
です。 - short型は、バイトなどのスペースを節約できます。 short変数は、int変数が占めるスペースの半分です。
- デフォルト値は
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ビットで、IEEE754標準に準拠した浮動小数点数です。
- floatは、大きな浮動小数点配列を格納する場合、メモリスペースを節約できます。
- デフォルト値は
0.0f
です。 - 浮動小数点数によって、通貨などの精確な値を表すことはできません。
- 例えば:float f1 = 234.5f。
double:
- double型は倍精度、64ビットで、IEEE754標準に準拠した浮動小数点数です。
- 浮動小数点数のデフォルトの型は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ビットの情報を表します。
- 値は2つしかありません:trueとfalse。
- この型は、true/falseの状況を記録するための記号として使用されます。
- デフォルト値は
false
です。 - 例えば:boolean one = true。
char:
- char型は単一の16ビットUnicode文字です。
- 最小値は
\ u0000
(つまり、0)です。 - 最大値は
\ uffff
(つまり、65535)です。 - char型は任意の文字を格納できます。
- 例えば:char letter = ‘A’;。
実例
数値型に対する基本型の値の範囲は、定数の形式によって対応するパッケージングクラスで定義されているため、強制的に覚えておく必要はありません。 次の実例をご覧ください。
public class PrimitiveTypeTest {
public static void main(String[] args) {
// byte
System.out.println("基本型:byte 2進数:" + 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 2進数:" + 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 2進数:" + 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 2進数:" + 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 2進数:" + 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 2進数:" + 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 2進数:" + 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 2進数:8
ラッパークラス:java.lang.Byte
最小値:Byte.MIN_VALUE=-128
最大値:Byte.MAX_VALUE=127
基本型:short 2進数:16
ラッパークラス:java.lang.Short
最小値:Short.MIN_VALUE=-32768
最大値:Short.MAX_VALUE=32767
基本型:int 2進数:32
ラッパークラス:java.lang.Integer
最小値:Integer.MIN_VALUE=-2147483648
最大値:Integer.MAX_VALUE=2147483647
基本型:long 2進数:64
ラッパークラス:java.lang.Long
最小値:Long.MIN_VALUE=-9223372036854775808
最大値:Long.MAX_VALUE=9223372036854775807
基本型:float 2進数:32
ラッパークラス:java.lang.Float
最小値:Float.MIN_VALUE=1.4E-45
最大値:Float.MAX_VALUE=3.4028235E38
基本型:double 2進数:64
ラッパークラス:java.lang.Double
最小値:Double.MIN_VALUE=4.9E-324
最大値:Double.MAX_VALUE=1.7976931348623157E308
基本型:char 2進数:16
ラッパークラス:java.lang.Character
最小値:Character.MIN_VALUE=0
最大値:Character.MAX_VALUE=65535
FloatとDoubleの最小値と最大値は、科学的記数法の形式で出力されます。最後の“E + number”は、Eの前の数値に10の何次を掛けることを示します。 例えば、3.14E3は3.14 × 103 =3140であり、3.14E-3は3.14 x 10-3 =0.00314です。
実際、JAVAには別の基本型voidがあり、これにも対応するラッパークラスjava.lang.Voidがありますが、それらに直接操作できません。
型のデフォルト値
次のテーブルには、Javaの各型のデフォルト値が示しています。
データ型 | デフォルト値 |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | ‘u0000’ |
String (or any object) | null |
boolean | false |
実例
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(“Runoob”)。
Java定数
プログラムが実行している場合、定数を変更できません。
キーワードfinalはJavaで定数を変更するために使用され、宣言する方法は変数に似てます。
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
データ型の変換は、次のルールを満たす必要があります。
- boolean型は変換できません。
- オブジェクト型を無関係のクラスのオブジェクトに変換できません。
- 大容量の型を小容量の型に変換する場合、強制型変換を使用する必要があります。
- 変換の過程により、オーバーフローまたは精度の低下が発生する可能性があります。例えば:
inti= 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 cDemo{
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("cchar型とint型を演算した結果は"+i2);
}
}
実行した結果は:
char型がint型に変換した後の値は:97
char型とint型を演算した結果は:66
解析:c1の値は文字aです。ASCIIコードテーブルを確認すると、対応するint型の値は97であり、Aの対応する値は65であることが分かるため、i2=65+1=66です。
強制的に型を変換する
- 条件は、変換されたデータ型に互換性が必要のあることです。
- 形式:(type)value typeは、型が変換した後に強制変換されるデータ型です。例えば:
実例
intが強制的にbyte型に変換した値は123
暗黙で強制的に型を変換する
- 整数のデフォルトの型はintです。
- 浮動小数点型にはこの状況が存在しません。float型を定義する時、数値の後にFまたはfを続ける必要があるためです。
この記事では、Javaの基本的なデータ型について説明しました。 次の記事では、各変数の型と使い方について説明します。
コメントを残す