Differences Between the CLR and JVM
This is a quick reference to differences between the CLR and JVM. It also bleeds into differences between C# and Java whose features often include compiler-level-only features that the underlying VirtualMachine is not cognizant of.
- CLR has unsigned types
- CLR has namespaces
- CLR has explicit interface implementations
- CLR allows non-overridding methods when the same signature (called 'new')
- CLR has value types
- CLR has non-virtual methods (I don't think JVM does)
- CLR has events
- CLR has out and ref parameters
- C# has partial classes
- C# has closures
- C# has yield
- C# can have multiple classes in a single file
JVM has …
- JVM has no generic types. This is purely at the compiler level. I've read that you cannot overload a method by a generic type such as List<of int> vs. List<of String>.
- Java has exception specification on the method level.
- Java has non-static inner classes
- assemblies vs. jars