Javaデータ型
変数の種類
変数は、プログラムの実行中に変更される可能性のあるデータをメモリに保持するために使用されます。
変数の定義
変数はデータ型と変数名を指定する必要があり、初期値を同時に割り当てることもできます。
int age = 20;
double price;
変数を最初に使用する前に初期化を完了することをお勧めします。
変数の範囲
変数は定義してから使用してください。ローカル変数のスコープは、宣言された場所から始まり、それが存在するブロックで終わります。同じスコープ内で同じ名前のローカル変数を繰り返し定義できません。
public static void main(String[] args) {
{
int age = 20;
System.out.println(age);
// double age = 0; // 同一作用域内重复定义,编译错误
}
{
double age = 0;
System.out.println(age);
}
}定数は
finalで修飾された変数は1 回だけ代入でき、通常定数と呼ばれます。
final double PI = 3.1415926;
数字や文字や文字列など、コードに直接书かれた値をリテラルと呼び、例えば10、'A'、"Java"がある。
データ型の分類
Javaのデータ型は、基本データ型と参照データ型に分けられます。プリミティブデータ型は単純な値を直接表し、配列、クラス、インターフェイス、列挙などは参照データ型に属します。
基本データ型
integer 型
| タイプ | ストレージスペース | 値の範囲 |
|---|---|---|
byte | 1ビット(8ビット) | -128 ~ 127 |
| “ | 2バイト(16ビット) | -2 ^15 ~ 2^15 - 1 |
int | 4バイト(32ビット) | -2 ^31 ~ 2^31 - 1 |
long | 8バイト(64ビット) | -2 ^63 ~ 2^63 - 1 |
整数リテラルはデフォルトでint型です。intの範囲を超える整数リテラルは必ず末尾にLまたはlを追加しなければならないが,実際の開発ではより明瞭なLを用いることを推奨する.
int age = 20;
long population = 3_000_000_000L;
整数範囲がlongを超える場合、業務上のニーズに応じてBigIntegerを使用することができます。
浮動小数点型
| タイプ | ストレージスペース | 説明 |
|---|---|---|
Float | 4バイト(32ビット) | 単精度浮動小数点数、約 7 桁の10 進有効数値 |
double | 8バイト(64ビット) | 倍精度浮動小数点数、約 15~16 桁の10 進有効数字 |
浮動小数点リテラルはデフォルトでdouble型です。float変数に浮動小数点リテラルを割り当てる場合,fまたはf接尾辞を付ける必要がある.
float score = 3.14F;
double price = 3.1423424;
浮動小数点数には精度誤差があります。正確な10 進演算が必要な場合は、BigDecimalを使用してください。
文字の種類
charは、UTF-16コードユニットを保持するために2バイトを取ります。文字リテラルには一重引用符を使用します。
char letter = 'a';
char unicodeLetter = '\u0061';
一般的なエスケープ文字は次のとおりです。
| エスケープ文字 | 意味 |
|---|---|
\r | 車に戻る |
| `\n|改行の仕方 | |
\t | タブ文字 |
\\ | バックスラッシュ |
\" | ダブルクォート |
\' | シングルクォート |
System.out.println("\\a\\");
System.out.println("d:\\lesson\\java2601");
System.out.println("这两个字符串\"相等\"");
Boolean 型
booleanはtrueとfalseの2つの値しかなく,主に条件判定に用いられる. Java 言語仕様では、通常のboolean変数が占有するバイト数は規定されていないため、特定のストレージサイズに依存しないでください。
boolean passed = true;
演算子の場合
算術演算子
一般的な算術演算子には、+、-、*、/、%、++、および--があります。
プリインクリメントは変数を変更して式を生成し、ポストインクリメントは元の値を生成して変数を変更する。
int i = 3;
int j = i++;
System.out.println(j); // 3
System.out.println(i); // 4
複雑な式で同じ変数を複数回変更すると読みやすくなり、できるだけ複数の文に分割してください。
代入演算子
代入演算子には、=、+=、-=、*=、/=、%=などがあります。
int value = 3;
value += 2;
複合代入演算子は暗黙的に必要な型変換を行いますが、データの切り捨てに注意してください。
比較演算子の比較
比較演算子には、==、!=、>、<、>=、<=があり、式の結果はbooleanになります。
論理演算子(論理演算子)
論理演算子はブール値を処理するために使用されます。
!論理的でない。&&はショートとを表す.||はショートまたはを表す.
int value = 3;
System.out.println(value > 0 && value < 10);
短絡演算では、左側の結果に基づいて右側の式の評価を続行するかどうかが決まります。
ビット演算子
ビット演算は、整数のバイナリビットを直接処理します。
| 演算子 | 意味 |
|---|---|
| ` | 反対側にある。 |
& | 略称はAND。 |
| ` | ``` |
| ` | 異なるか、 |
| “ | 左に移動。 |
| “ | 記号付き右シフト |
| `````` | 符号なし右シフト |
<<は左シフト時に右側にゼロ、>>は右シフト時に左側に符号ビット、>>>は右シフト時に左側にゼロが補われます。
System.out.println(-1 >>> 1);
System.out.println(~(-1 >>> 1));
オーバーフローが発生していない整数の場合、nビットの左シフトは通常2 ^nを掛けることと等価である。右シフトと除算は、負の数と丸めのルールが異なる場合があり、すべてのシナリオで直接同等ではありません。
短絡演算とビット単位演算
&&と||ブール式でのみ使用でき、短絡特性を備えています。&と“|`は整数ビット演算とブール演算の両方に使用できます。ブール演算で使用すると、両方の式が実行されます。
int i = 3;
System.out.println(i > 5 && i++ < 10);
System.out.println(i); // 3
System.out.println(i > 5 & i++ < 10);
System.out.println(i); // 4
異なるまたは演算
ビット別の排他的和では、同じビットの結果は0、異なるビットの結果は1です。
System.out.println(3 ^ 5); // 6
例外 ORは一時変数を使用せずに2つの整数を交換できますが、これは読みにくく、2つの変数が同じ格納場所を参照するとエラーになります。実際の開発では一時変数を推奨します。
int a = 3;
int b = 4;
int temp = a;
a = b;
b = temp;
ビット演算の一般的な応用
パリティの判断
boolean odd = (value & 1) == 1;
2 倍の力
value << nは、オーバーフローしないという前提でvalue * 2^nに相当する。
2の累乗を取る
valueが非負整数であり、かつ除数が2 ^nである場合、value % 2^nはvalue & 2 ^n ― 1と書くことができる。通常のビジネスコードは、より明確なセマンティクスを優先するべきです。
平均オーバーフローを避ける
2つの整数の平均値を計算する場合,x + y/ 2をそのまま用いると加算段階でオーバーフローする可能性がある.値の范囲に応じてx + y - x/ 2を使用するか、先に大きな型に変换することができます。
演算子の優先順位
演算の順序がわからない場合は、複雑な優先順位ルールを記憶するのではなく、括弧を使って意図を明示的に表現する必要があります。
boolean result = (a + b) > 10 && c != 0;
データ型の変換
型変換の自動化
値範囲の小さい数値型は、通常、自動的に値範囲の大きい型に変換できます。
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double
System.out.println(5.0 / 2); // 2.5
System.out.println('a' + 1); // 98
System.out.println(2.0 % 5); // 2.0
整数をゼロで割るとArithmeticExceptionがスローされます。浮動小数点数を`0.0 ‘で割ると、無限大または数値以外の結果が得られます。
System.out.println(17.0 / 0.0); // Infinity
型キャストの強制
値範囲の大きい型を小さい型に変換するには、明示的なキャストが必要です。キャストは精度の損失や数値のオーバーフローを引き起こします。
System.out.println((int) 5.9); // 5
System.out.println((char) ('a' + 1)); // b
booleanを除いて,基本数値型同士は規則に従って変換できる.コードを書くときは、不要なキャストを避け、変換された値の範囲を確認してください。
気に入ったならばコメントを残してくださいね~