最初に
この記事は、以下の書籍を通じてJava silverの合格に向けて自分が学んだ内容を体系的にアウトプットする記事である。(目指せ年内合格!)
徹底攻略Java SE 11 Silver問題集[1Z0-815]対応
勉強記録
3章 演算子と判定構造
型変換
- 大きな値を小さな値に変換する時は、以下のように明示的な型変換が必要
-
int a = 10; short b = (short) a;
- ただし、byte型やshort型に変換する場合のみ、明示しなくても良い
- ちなみに各型の範囲
- byte型(8ビット): -128 ~ 127
- short型(16ビット): -32,768 ~ 32,767
- char型(16ビット):0~65535(非負の値のみ)
- int型(32ビット): -2147,483,648 ~ 2,147,483,647
- long型(64ビット): -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
浮動小数点
- 浮動小数とは
- 計算で誤差が出ることが前提とされている代わりにより大きな範囲の値を表すことができるデータ
- float型とdouble型がある
特性 | float型 | double型 |
---|---|---|
ビット数 | 32ビット | 64ビット |
精度 | おおよそ6〜7桁の有効数字 | おおよそ15〜16桁の有効数字 |
符号ビット | 1ビット | 1ビット |
指数部 | 8ビット | 11ビット |
仮数部 | 23ビット | 52ビット |
最小値 | 約 -3.4028235 × 10^38 | 約 -1.7976931348623157 × 10^308 |
最大値 | 約 3.4028235 × 10^38 | 約 1.7976931348623157 × 10^308 |
- 正確な計算を要する場合は、BigDecimalを使用する
- 浮動小数点は、2進数で値を保持するが、10進数から2進数に変換する際に、正確に表現できる値の違いにより誤差が生じる。一方で、BIgDecimalは、10進数で値を保持するため、同様の誤差が発生しない。
- https://programming-tips.jp/archives/i/5/index.html
同一性と同値性
- 同一性:同じインスタンスであること(同じインスタンスを参照していること)
- ==で判定
- 同値性:同じ値であること
- equalsメソッドで判定
- String型は、==で同値性を判定できる
- コンスタントプールという仕組み
- Java仮想マシンにおいて、定数やシンボルを保存する領域のこと。 ヒープ内のメソッドエリア(テキストセグメントのような場所)に存在し、全てのスレッドから共有される。
- 同じ文字リテラルがプログラム内に再び登場すると、定数用のメモリ空間にある文字列インスタンスへの参照が使い回しされる。
- コンスタントプールは、文字列リテラルを用いて宣言した時のみ有効。明示的にnewを使って宣言した場合は、コンスタントプールに作成されない。
- internメソッド
- コンスタントプールを含むメモリ内の文字列を探して、再利用するためのメソッド
- コンスタントプールという仕組み
switch文
- 条件式が戻せる型
- 戻せる
- int型以下の整数型とラッパークラス
- 文字と文字列
- 列挙型
- 戻せない
- long型
- float型、double型
- boolean型
- 戻せる
- case値(分岐で使う値)
- 使用できる値
- 条件式が戻す値と同じ型か、互換性がある型
- 定数であるか、コンパイル時に値を決めることができること
- nullではないこと
- 変数は使用できない!
- 使用できる値
- breakが現れるまで、次のcase式の処理を実行し続ける。
他
- if文の中括弧は省略できる
- 省略した場合は、次の一文だけ処理される
- ただ、どこまでがif分岐内かわかりづらいため、推奨されない
感想
- float型や、double型で正確な計算ができないことは知っていたが、その仕組みが新数変換によるものだというのまでは理解できておらず、勉強になった。
- コンスタントプールは、初耳すぎた。メモリが節約できてありがたいんだろうけど、どれだけありがたいかあんまり想像つかん。
- あと、数日体調崩していて、年内合格が厳しそう。。。1/3までに合格を目標とし軌道修正。