コンパイラが出力したアセンブラを見てみよう。LBB1_1volatileをつけている方は素直にwhile(!stop);と同じ動作になっているけど、volatileをつけていない方は最適化によって、以下と同様の動きになってしまっている。}だって、while(!stop);ループの中ではstopを書き換えていないんだから、永久に抜け出せないだろ!ってコンパイラが判断したんだね。伝えるのためにvolatileをつけなきゃいけないんだね。※-Onオプションをつけて最適化しないと上記結果にはならない。シグナルハンドラや割り込みハンドラ、もしくはハードウェアがどこかのメモリ領域を書き換えてしまうような場合、変数宣言にvolatileを付けておかないと正しく読み取れなかったりするんだね。ちなみにC#ではlongやdoubleにはvolatileはつけられないので、longやdoubleのアトミック性の保証は別でしなければいけない。Windowsのコマンドプロンプトで正規表現を使って、文字列置換ファイルや標準出力の内容を文字列置換したいなんてことはよくあるよね。こんなときUnixだと、sedやawkを使うところだけど、Windowsのコマンドプロンプトでは該当するコマンドが用意されていない。バッチに変数の文字列置換をする機能はあることはあるけど、バッチでループを...Javaで空のリストを返すメソッドからコレクションを返す場合、無効な状態を表すのにnullを返すのではなく、要素数0のコレクションを返すのが良い作法とされている。その度に新しいインスタンスを作成するのは無駄なようにも思える。テストデータを作ったので、SQLiteにデータを投入してみよう。テーブルのDDLを作成する。Blogger.QooQ。