第3章前半
普段無意識に行っているが、改めて勉強すると・・・
- スタックとヒープ
- インスタンス変数とオブジェクトはヒープ
- ローカル変数はスタック
- 8進数は0からはじまる
- 16進数は0xではじまる
- long型は最後にLまたはlをつけるかきゃ巣とする
- 小数点数リテラルのデフォルトはdouble型
- 整数リテラルのデフォルトはint型
- 参照変数の値はオブジェクトそのものではなく、オブジェクトを表すアドレスでしかない
- intより小さなbyte,char,shortの計算はint型になる
- 以下のコードはコンパイルエラー
byte b = 3; byte c = 8; byte d = b + c;
- 小さな値を大きな値にするのは暗黙キャスト
int a = 100; long b = a;
- 大きな値を小さな値にするのは明示キャスト
float a = 100.001f; int b = (int)a;
- 整数をdouble型に代入する際に明示キャストは不要
- double d = 100L;
- doubleからintへもキャストできる
- int x = (int)1234.567;
- 実行結果は1234
- 縮小変換した場合、その型に入らない下位8ビットより左は切り捨てられる
long l = 130L byte b = (byte)l;
-
- 実行結果は-126(補数扱い)
- 複合演算子は暗黙的なキャストを含んでいる
byte b = 3; b += 7; //OK b = b + 7; //NG
- 基本データ型変数を他の基本データ型変数に代入しても、同じアドレスを参照するわけではない
- 参照変数では同じオブジェクトを指す
- String型は例外でimmutable
- 静的コンテキストからインスタンス変数にはアクセスできない
class Hoge{ int x = 0; public static void main(String[] args){ x++; } }
-
- 普通のstaticメソッドは・・・?
- ローカル変数を初期化せずに使おうとすうとコンパイルエラー
- インスタンス変数の初期値
- オブジェクト参照、String:null
- 整数型:0
- 小数点型:0.0
- char:'\u0000'
- 配列自体はnull、内部のオブジェクトは上記に従う
- 使用しないローカル変数の初期値はコンパイルエラーや実行時エラーにはならない
- ローカル変数の配列の中身は初期化される
- メソッドに変数を渡す場合
- オブジェクト参照はあくまで"オブジェクト参照"を渡す
- 呼び出し側と呼び出せる側は同じオブジェクトを参照する
- オブジェクト参照はあくまで"オブジェクト参照"を渡す
- 「参照渡し」と言う言葉は正確ではない
- オブジェクト参照の場合、到達方法を現すビットパターンのコピーを渡す(いわゆる参照渡し)
- 基本データ型変数の場合、その値を表すビットパターンのコピーを渡す(いわゆる値渡し)
- シャドウ化変数には注意する