Windows前提と決めつけている人にとっては極端に聞こえるだろうけど
会社でも家でもWindows使っていない人には
C#で開発とかマジで有り得ないよね。
そういう環境でもJavaなら選択肢になるということ。
そんな奴いねーとか思うかも知れないけど、GNU/Linuxしか使っていない人とか、
Mac OS Xしか使ってないって人も少しはいるんだよ。
Windowsだけを使っている人にとっては、極端に見える環境のためにJavaはあるんだよ。
Windows以外のC#というのは、WindowsのC#と全く別物と思っていい。
互換性あまりないから。
そしてWindowsのことだけを考えるなら、C/C++でよくてC#の意味が分からなくなってくる。
C#はWindows専用としても中途半端でもマルチプラットフォームでも中途半端。
Windows専用としてバリバリ使えるC/C++と、マルチプラットフォームでバリバリ使えるJava。
中途半端と完全だったら、常に完全の勝ち。