第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、内部のオブジェクトは上記に従う
  • 使用しないローカル変数の初期値はコンパイルエラーや実行時エラーにはならない
  • ローカル変数の配列の中身は初期化される
  • メソッドに変数を渡す場合
    • オブジェクト参照はあくまで"オブジェクト参照"を渡す
      • 呼び出し側と呼び出せる側は同じオブジェクトを参照する
  • 「参照渡し」と言う言葉は正確ではない
    • オブジェクト参照の場合、到達方法を現すビットパターンのコピーを渡す(いわゆる参照渡し)
    • 基本データ型変数の場合、その値を表すビットパターンのコピーを渡す(いわゆる値渡し)
  • シャドウ化変数には注意する