It has always been a tough job to decide between .Net and Java for developing IT projects. It is an ongoing war which has dedicated supporters on both sides. Naturally, each group has lots of praise and advantages to name for their platform. Further, they don’t leave any chance of pointing out any shortcomings or limitations of the other technology. It is not possible to get an unbiased comparison in such an environment.
There are different capabilities in each technology and that is why they are most effective in different scenarios. If that was not true then we would have not seen such a huge rise in the number of offshore Java development service providers and .Net development companies in offshore locations. However, I have tried to present an unbiased comparison between both the technologies.
The comparison is done between features provided by each for similar purposes.
C# programming language VS Java programming language
Both C# and Java are derived from C and C++. The most significant features, i.e. garbage collection and hierarchical namespaces are available in both the languages. However, C# derives some of its component concepts from JavaBeans and adds some of its own components which are incorporated in the syntax in a different manner.
Java can run on any platform which has a Java VM whereas C# only runs in Windows and it is unlikely to change in near future.
C# is completely tied into the IL common language runtime and runs as just-in-time (JIT) compiled bytecodes or it is compiled into native code.
On the other hand, the Java code runs as Java Virtual Machine (VT) bytecodes that can be easily interpreted in the Virtual Machine or compiled as just-in-time bytecodes. Java code can also be compiled entirely into native code.
.NET common components also known as .NET Framework SDK VS Java core API
High-level .NET components provide support for distributed access through XML and SOAP.
Active Server Pages+ (ASP+) VS Java Server Pages (JSP)
Code snippets can be easily created in ASP+ by using Visual Basic, C# or some other languages. This is only possible because all the code gets compiled into native code through the common language runtime. JSPs use Java code (snippets, or JavaBean references) which is easily compiled into Java bytecodes. This is done either on-demand or batch-compiled, depending on the implementation of Java Server Pages.
IL Common Language Runtime VS Java Virtual Machine and CORBA IDL and ORB
.NET common language runtime feature enables code in multiple languages to use a shared set of components. This feature underlies in nearly every .NET framework.
Virtual Machine specifications of Java allow Java bytecodes to run on any platform featuring a compliant Java Virtual Machine.
CORBA allows code written in multiple languages to use a shared set of objects on any platform having an ORB available. This feature not very tightly integrated into J2EE framework.
Win Forms and Web Forms VS Java Swing
Similar web components like those based on JSP are not available in Java standard platform however some proprietary components are made available through Java IDEs
Win Forms and Web Forms RAD development is fully supported through MS Visual Studio IDE. Swing support is made available in most of the Java IDEs and tools.
ADO+ and SOAP-based Web Services VS JDBC, EJB, JMS and Java XML Libraries
ADO+ is developed on the grounds of XML data interchange, which occurs between remote data objects and layers of multi-tier apps, and on top of HTTP. .NET’s web services in general use SOAP messaging models. However in Java, EJB, JDBC, etc. leave the data interchange protocol for developers to decide, and operate over HTTP, RMI/JRMP or IIOP.
Clearly, there are advantages and limitations with both the technologies. The type of technology you use for a particular project depends upon your level of comfort and projects requirements. As far as resources are concerned you can easily hire .Net developers and Java professionals from offshore software development companies. They offer highly skilled and experienced professionals having specialization in a particular web development technology.