As a Java programmer for the past several years, I’ve been intrigued with Microsoft’s .NET. It’s a very compelling framework and has some interesting features. The crossover now is also much easier from a Java programmer to a Microsoft programmer (something MS I bet had in mind). The difference between J2EE development and .NET development is now much smaller than compared to Java and Microsoft development in the past. But, there are still key differences between the two.
Major differences between J2EE and .NET:
1) .NET only runs on Windows OSes. J2EE is available on multiple OSes (Windows, Unix, Linux, Solaris, etc)
The advantage of .NET running only on Windows is that the CLR can be more optimized since it only targets a specific OS. The disadvantage is that you’re locked into only one OS.
The advantage of J2EE running on multiple OSes is especially compelling for service providers. It doesn’t matter what OS their customers have. Also, most medium and large IT departments are not sole Microsoft shops. They usually also have some Unix machines mixed in.
2) .NET supports multiple languages. J2EE only supports Java.
Multiple language support is only nice for migrating legacy code or for programmers who don’t want to learn a new language.
Most likely software shops will not use multiple languages to create applications. It becomes a maintanence nightmare to support an application written in multiple languages.
It would be almost impossible to add new language features to J2EE. With .NET, it’s easy to add a new language in the future.
It’s more difficult to integrate non-Java code with J2EE than with .NET.
3) Lower cost of entry with J2EE.
There exists numerous open source implementations of J2EE. So far, there are very few open source initiatives for .NET.
J2EE can run on Linux. .NET requires you to purchase Windows.
4) J2EE is designed for server side computing. .NET is both client and server side.
If you’re building a standalone client application, .NET would be the better choice.
5) Windows Forms vs Swing
Microsoft knows user interface and WinForms is superior to Swing.
If Microsoft would design .NET to allow WinForm controls on Internet Explorer, this move alone would lock them in as the sure winner between the two technologies.
6) .NET only supports SOAP. J2EE supports SOAP, XML-RPC, CORBA, and RMI.
SOAP is a heavy duty protocol. XML-RPC is more lightweight, faster, and easier than SOAP for web services.
7) J2EE is several years ahead of .NET
Java has been used for 4 more years than C#.
There is a much larger user base of J2EE.
8) .NET was designed with XML in mind, J2EE was not.
.NET is ahead of the curve with XML compared to J2EE. Though the gap is rapidly shrinking.
9) Tools
VisualStudio.NET is better than Java IDEs. But there are a lot of free/open source Java IDEs.
10) Marketing
If there’s one thing Microsoft can do, it’s marketing. This alone makes .NET a formidable opponent. Nobody else (Sun, IBM, HP, Oracle) can match the Microsoft marketing machine. Probably the only other companies that can match it are Coca-Cola and McDonalds, but I don’t think they’ll be getting into the computer business anytime soon.
11) J2EE is multi-vendor. .NET is single-vendor.
Many companies are involved in J2EE, including a large open source community. This collective power is a strong force, as long as it doesn’t break apart and fracture J2EE.
Since .NET is controlled entirely by Microsoft, they can make .NET products unified and better integrated, but they are limited by the number of brains owned by Microsoft.
12) Java developers generally get paid more than Microsoft developers.
Good for those getting paid, not so good for those doing the paying.
Sources:
ServerSide
How Do They Stack Up?
.NET vs Java
The great debate: .Net vs. J2EE
Picking a Winner: .NET vs. J2EE
Java vs. C#, a Code-for-Code Comparison
Java vs .NET
Java/.NET links