昔やっていた恥ずかしいコーディング −型変換編−

 これは今までで一番アホらしいです。文字列を int 型にするとき、↓こんなことやってました。

String s = "123";
int i = Integer.valueOf(s).intValue();

 もちろん↓これでいいわけです。

String s = "123";
int i = Integer.parseInt(s);

 次に型変換ではないですが、型に関係するはまりパターン。ていうか、最近はまった。

int i = -1;
 
System.out.println(i >> 1);   //(1)
System.out.println(i >>> 1);  //(2)

(1)と(2)の違いはわかりますか? そうです。(1)は先頭ビットが立ちますが、(2)は立ちません。では↓はどうなるでしょうか?

byte b = -1;
 
System.out.println((byte)(b >> 1));   //(1)
System.out.println((byte)(b >>> 1));  //(2)

答えは両方とも先頭ビットが立ちます。なぜならば、シフト演算はintにキャストされてから行われるためです。