C SharpとJavaの比較
数学・科学計算・金融分野のアプリケーション開発に十分対応するための言語仕様が、それぞれに存在する。Javaでは厳密な浮動小数点計算を強制するためにstrictfpキーワードが存在する。これによってあらゆるプラットフォームで必ず同じ値が結果として得られることを保証することができる。C#にはこれに相当する機能はないが、厳密な浮動小数点計算のためにdecimal型が存在する。これによって二進浮動小数点表現(float、double)に存在する問題が解決される(二進表現の浮動小数点数は十進数を正確に表現することができないため、丸め誤差が生じてしまう)。金融分野のアプリケーションソフトウェアでは厳密な十進表現は必須である。Javaでは、このような用途のためにjava.math.BigDecimalが導入されている。また、Java 1.1では巨大な整数を扱うためのクラス型としてjava.math.BigIntegerが導入されている。BigDecimalとBigIntegerは最大で約21億桁程度までの数を任意精度で表現できる。
両言語の構文(文法)、プログラミングインタフェース、バイナリ形式(実行ファイル形式)、実行環境などは様々な機関によって管理されている。
C#はEcmaとISO、JISによって定義されている。標準化の対象は言語構文、基本クラスライブラリ、アセンブリ形式、実行環境(共通言語基盤: CLI)など多岐に渡る。下位層フレームワークの上に新しく実装された上位層ライブラリの多くはこの標準には含まれない(Windows Forms、ASP.NET、ADO.NETなど)。
現在のところ、Javaのどの部分も第三者の標準化団体によって標準化されていない。Javaの商標、ソースコードやその他の素材に関してはオラクル(旧サン・マイクロシステムズ)が無制限の独占的な権利を保持しているが、オラクル(サン)はJava Community Process (JCP) と呼ばれるプロセスに参加し、当事者たちがJavaに関連する技術(言語、SDKからAPIに至るまで)に対する変更を専門家団体や諮問会議を通して提案することを許可している。JCP内の規定では、Javaに対する新しい仕様や変更はオラクル(サン)による承認が必要であるとされている。JCPは営利寄与者に対しては会費が必要としているが、非営利寄与者や個人は無料で参加できる。JavaのAPIセットにはいくつかのエディションがあり、標準エディションのJava SE、エンタープライズ向けエディションのJakarta EE(旧Java EE)、モバイル/組み込み環境向けエディションのJava MEが存在する。
C# 3.0でコンテキストキーワードvarによる限定された型推論が導入された。ローカル変数の宣言時に、型を右辺から推論できる。メソッド引数やフィールドには使えない。また、ラムダ式の戻り値および仮引数は型推論により決定される。ラムダ式の仮引数は型を省略することで型推論されるが、型推論が困難な場合には明示的に型を指定する。
Java 7で導入されたダイヤモンド演算子<>は宣言文の右辺ジェネリクスの型を省略できる程度のものでしかなかったが、Java 10ではC#同様に予約型名varによるローカル変数の型推論が導入された。Java 8で導入されたラムダ式では、仮引数の型を省略することで型推論されるが、さらにJava 11ではラムダ式の仮引数の型にvarを使用して型推論できるようになった。