Javaのメモ

コンパイル

  • 1つのファイルに複数のクラスがあるときは、ファイル名はファイルの中のどのクラス名でも良い。で、そのファイル名を指定してコンパイルする。
  • 複数のファイルにそれぞれクラスがあるときは、一番外側(?派生クラスとかクライアントクラスとか)のファイル名を指定してコンパイルする。
  • 異なるディレクトリにファイルが存在するときは、-classpath オプションでそのディレクトリを指定する。または、環境変数 CLASSPATH に指定する。

プリミティブ型

  • unsinged はない
  • byte: 1バイト、short: 2バイト、int: 4バイト、long: 8バイト
  • float: 4バイト浮動小数点数、double 8バイト浮動小数点数
  • それぞれのクラスが存在し、publicなフィールド値が定義されてる。(Integer.MAX_VALUEとか)

long

リテラルに"L"を付けないと、8バイトとして扱われない
  1. long l1 = 0xFFFFFFFF;
  2. long l2 = 0xFFFFFFFFL;
  3. System.out.println("l1: " + l1 + " l2: " + l2);
  4. l1++;
  5. l2++;
  6. System.out.println("l1: " + l1 + " l2: " + l2);
出力
l1: -1 l2: 4294967295
l1: 0 l2: 4294967296

float

リテラルに"F"を付けないと、コンパイルエラー

右シフト

>> 算術右シフト
  • 符号ビットが1(負数)のときは1がMSBに追加される
  • 符号ビットが0(正数)のときは0がMSBに追加される
  1. int i1 = -1, i2 = 0x7FFFFFFF;
  2. System.out.println("i1: " + (i1 >> 1) + " i2: " + (i2 >> 1));
出力
i1: -1 i2: 1073741823
>>> 論理右シフト
  • 符号ビットにかかわらず0がMSBに追加される
  1. int i1 = -1, i2 = 0x7FFFFFFF;
  2. System.out.println("i1: " + (i1 >>> 1) + " i2: " + (i2 >>> 1));
出力
i1: 2147483647 i2: 1073741823

String型の比較

== ではなく String.equals() を使う
  1. String s1 = "ABC";
  2. String s2 = new String("ABC");
  3. if (s1 == s2) { // 文字列の比較ではない
  4. System.out.println("match");
  5. } else {
  6. System.out.println("unmatch");
  7. }
  8.  
出力
unmatch

switch 文

switch(n) の n は int 型でないとならない

for 文のラベル

ラベルの指定で、多重ループを一気に抜けられる
  1. int i = 0, j = 0;
  2. LOOP_1:
  3. for (i=0; i<10; i++) {
  4. for (j=0; j<10; j++) {
  5. if (i==1 && j==5) {
  6. break LOOP_1;
  7. }
  8. }
  9. }
  10. System.out.println("i: " + i + " j: " + j);
  11.  
出力
i: 1 j: 5

タグ:

Java
最終更新:2012年03月27日 23:21