変数名の先頭にアンダースコアを付ける時の意味合い

何の本だったか忘れたけど、Java 系の O'Reilly 本で、final なローカル変数の先頭にアンダースコア「_」を付けていた

IDE のようにシンタックスハイライトされない白黒の紙面で final な変数の区別がつけやすくするためなのだろうか。それとも何かそういう慣例があるのだろうか。

ググったらどうやら C 言語周りで private な関数の名前に対して先頭アンスコを付ける習慣があるっぽい。そこから派生したものなのだろうか。よく知らない。

しかしそれにしても、Java における参照型 (プリミティブ型以外のもの) は、final を付けたところで参照を書き換えられないだけで、中のプロパティを書き換えたりすることはできてしまう (例えば setter を介した値変更とかはできちゃう) わけで。参照を変えるような操作ってそんななさそうだし、final を付けても気休めな感じがする。

「変数名にアンスコまで付いてるし、なんかいじっちゃいけない感じの変数なのかな?」っていう気付きが与えられるからいいんだろうか。

名前の先頭にアンスコを付ける、この命名規則の起源と元々の使われ方、そのメリットなどが知りたい。