I'll be using the words CLI and .NET interchangeably refferring to any implementation of the CLI (.NET, Mono or dotGnu)
These are some of my points.
- In .NET you have a choice of languages to code with (C#,VB.NET, Java,Boo,Python e.t.c), producing the same type of compiled code but in Java one is limited to the java language. One may argue that jython is an alternative, but even the creator of jython who later created it's .NET version called IronPython admitted that .NET is a more powerful technology.
- .NET prgrams run at native speed while java is interpreted which makes java slower.Although java has Just In Time compilation but it stills run slower. With .NET you are not limited to JIT but have the option AOT or ahead of time compilation if you want to eliminate startup delays.
- Calling native code in java is not a very clean process. You need to generate some stub files which makes the whole process cumbersome and dirty. In .NET you just declare that you are calling a native function from a specified library and just start calling it.
- .NET languages are richer than Java. They have object oriented feature that are absent in java e.g properties,delegates,generics.
- Java GUI programs look alien on the host operating system. Even if you use the OS's theme you still notice that the java widgets look out of place.
- .NET in the form of Mono has brought a whole revolution on the linux desktop in form of great applications like beagle, tomboy, diva, iFolder, banshee e.t.c. This is something that java has failed to do despite the fact that it's been there long before .NET
- Many programs that would have been difficult to develop with java have been developed with .NET things like compilers (Mono's C# and VB.NET) 3D game engines (unity game engine) e.t.c
- The CLI is an open standard maintained by an independent standards organization (E.C.M.A) while java is still governed by SUN microsystems.Even though java has recently been open-sourced, it's future will still be highly influenced by SUN.
- You can code on the .NET platform using Java but you cannot code on Java platform using any of the .NET languages.
- Using Mono's IKVM to call java code from .NET or convert java classes to .NET assemblies. This is so efficient that large java programs like the eclipse I.D.E have been runned on .NET.
Feel free to criticize my views with your comments.