Java is a programming language while .NET is a runtime environment. Java is a specific programming language. It's advantages are that most every browser out there supports the Java Virtual Machine and you can write platform independent code since Windows, Apple, Linux, Unix all have JVMs for their environments. Very extensible and allows for the widest range of audiences. .Net is the framework for many different languages - including some very odd Java.Net implementations. If you're specific about any language that would be best suited to develop using the .Net framework - then you might consider C# being that language. C# is very very similar to Java syntactically and in how the language loads itself into its own managed/virtual machine environment. Considering that one of the chief people involved with Java at Sun eventually moved to Microsoft to be a primary architect of C#, this isnt surprising (I worked with these guys when I was with Visual Studio from 1998 thru to 2005). .Net doesn't have the portability of Java - Unix and Linux from my most recent knowledge dont support .Net, and I dont believe an implementation of the framework ever got past Beta for Apple OS. Even within Microsoft, some of the divisions (Office being the primary one) wouldn't adopt .Net for product development simply because of the migration and performance issues that would affect their products. Vista was supposed to be the OS that was fully .Net integrated, but they dropped that when they dropped the WinFS - it would have taken way too long to work out all the issues with this. .Net does have advantages - you can write in whatever language you want as long as it compiles to the Intermediate Language and it will be able to work with everyone else's components regardless of their language of choice. It will even work with Java as long as it's compiled to IL. .Net does a just in time compile/link that happens on first instance of execution, so there's a very noticeable performance hit there, but each time after it will run just like a native program since the exe will exist - the only perf hit from then on will be initializing all the objects in the managed stack/heap which at times can be significant. So as someone above mentions - if your company has a mandate thru some MSFT partnership or funding to be a .Net shop, then you're .Net no matter what. As a developer - most of the development environments have identical feature sets that make coding fairly easy so toolset wise there's no real difference between any language paradigm anymore. I've worked in both sets of environments and apart from differences in libraries and declarations I find both to be equally effective from my perspective.