In Development
Comparing C# to Java - I Code in Both. Learn about the Differences and Similarities. - read the full article about java development, Development and from McCullough & Associates on Qualified.One

Youtube Blogger

Are you trying to decide between C# and Java? Are you proficient in one and would like to know how it compares to the other one? Are you trying to decide which one to learn? Hi, its Chuck here with another language comparison video! Yeah, thats right im going to go there. Judging from some of the comments on my last comparison video some viewers apparently feel like i insulted their spouse! Now, ive been designing and implementing applications for nearly four decades and i like curly-brace languages in particular C++, Java and C# and i really enjoy coding in all of them. This comparison is simply to help you make an informed decision. First, theres a basic difference in philosophy. Java architect James Gosling insisted on inventing a simple language when it came to java back in the mid-early 90s. Capabilities would be built into class libraries and tools. Java has roughly 50 keywords or so - relatively small language compared to most other languages. C#, on the other hand has over a hundred keywords and contextual keywords and many more syntactical features. A driving force behind c sharp philosophically is to minimize code size and eliminate tedious or boilerplate code. So, you kind of think of it like C# is like a luxury vehicle with every bell and whistle no need for any aftermarket or add-ons because everything is already on it java on the other hand is kind of like a stripped-down jeep or volkswagen beetle with thousands literally thousands of third-party add-ons and you can configure whatever you want now gosling and oracle parted ways back in 2010 and since then oracle has added some new bells and whistles to java and kind of standardized some of the third-party items so that configuration and building applications is a little bit more straightforward and simpler but its still a smaller simpler language with an enormous ecosystem of third-party tools at the same time microsoft with the introduction of.net core has opened up to encourage more third-party componentry now lets start with what they have in common they both compile to an intermediate code and execute within a runtime they both have run anywhere capability theyre both strongly typed theyre both object oriented languages with a single base class called object and theyre limited to single inheritance both have value type primitives and primarily reference based as far as the rest of your variables are concerned they both support generics they both support functional programming and include lots of metadata in the binaries to support dynamic applications in fact this class will compile in either language properties in java are supported through a programming convention of centering getter functions on the other hand c-sharp has a specific syntax for properties so we could re-code that class for c-sharp specifically creating designated properties now a lot of cases in properties in our code the properties are trivial simply exposing some backing field in that case c sharp provides us even a more concise syntax called auto properties now another subtle but significant difference is that java primitives are not objects if you need to treat a primitive as an object you have to use a wrapper class to make that primitive appear as a reference type as an object type for instance like in a generic parameter in c sharp the primitives are simply aliases for net types and all net types are derived from objects c sharp supports the definition of both value types and reference types using either struct or class and both are first class citizens and both can be used as generic parameters c sharp primitives can also be declared as nullable using language syntax the question mark now we can do the same thing in java using the class optional or the generic optional so you see what i mean c sharp provides a syntax for a feature while java accomplishes the feature via some class now speaking of type specifiers java has three class enum and interface c sharp has several it has class interface and enum and it also has struct record delegate and an implicit dynamic type basically a tuple now java supports the concepts of record and tuple but again its done via classes value and reference type semantics in java is fixed in other words the primitives are value types classes are reference types and theres no changing that in c-sharp you can choose whether a value type is passed by reference or passed by value and in c-sharp you can define using struct value types and using class reference types now i think one of the most significant differences is that c sharp supports operator overloading this means that the programmer can use standard comparison operators to compare any object type that defines those operators this is a common pitfall for java developers because the equality operator double equal is syntactically legal which compares the references not the values java developers are reminded to call the dot equals or dot compare methods both languages support functional programming and lambda expressions java basically repurposed the single abstract method interface and called that a functional interface while c sharp has a type definition called a delegate to define a function signature to use in functional callbacks or functional definitions java also supports events event triggering and subscription but again just like the properties it does that through naming conventions c sharp has a dedicated keyword and a dedicated syntax for eventing now there is also a difference in exception handling java initially promoted the concept of checked exceptions making a programmer to declare the exception types that might emit from the method however in c sharp there is no mechanism for that you couldnt do it if you wanted to the trend in c plus and actually even in java is to move away from checked exceptions in most situations some java frameworks like spring for instance catch the checked exceptions and rethrow unchecked exceptions checked exceptions sounded like a good idea at the time but ended up really making code more brittle now there are subtle differences in how things work under the hood and we dont want to get too specific here because every version the runtimes change and so we dont want to get into that too deep javas garbage collection initially was optimized for desktop applications and therefore was lazy there was no need to clean up memory allocations if the application wasnt going to live very long anyway while.net utilized whats called a generational garbage collection scheme thats more well suited for server-based applications oracle did introduce generational garbage collection for java starting in version 8. all right now generics are also handled differently java compiles generics using object as the template parameter and enforces the type safety in the application code at compile time so in reality theres only one instance of any generic class c sharp generates a new type for each generic variant now this only really matters if your code is using reflection to determine a type at run time now another big difference between java and c sharp is something called language integrated query or link this is a feature in c sharp that allows us to create queries against any kind of data set a collection an in-memory collection or any ado.net database driver honestly can be used its accomplished through some features in c-sharp called extension methods java does not have extension methods now i hate to bring this up because there are so many variables that its really hard to measure with any certainty i promise you any programmer can get the answer they want to get but here we go anyway i just ran a very simple unscientific cpu intensive loop to calculate pi the c-sharp version ran in about 400 milliseconds and the java version took just under twice as long about 750 milliseconds or so now dont read too much into that and dont get excited java programmers we used to have a saying back in the late 90s you know java developers would ask about performance and id say why why all of a sudden you become concerned about performance youre using java arent you its fast enough and the same things true with c sharp its fast enough if you really want blazing speed go code and c plus plus most applications arent all that performance critical in determining performance though if you are really trying to measure that you have to consider a lot of other factors like network and database speed both platforms handle threading and multi-core architecture and all that kind of stuff really well from little things like implicit variable types with the var keyword to bigger things like functional programming the programmer experience is really pretty similar if the java developer can step into an existing technology stack then they can start right out of the box just like the net developer there are some scenarios that favor one over the other lets say that i need to build something thats going to really easily deploy and run anywhere i would choose java the net core platform was also run anywhere but its not quite as easy to do if i need to develop a phone application for the iphone or for android i would choose c sharp on xamarin or maui its also a better choice for game development like under unity otherwise it really doesnt make that much difference choose based on your existing developer resources all right im sure i ruffled some feathers why dont you give it to me in the comments section make sure you hit the like button make sure that you tell your friends about this video and subscribe to our channel thats how we can bring you more great content going forward im chuck mccalla thanks
McCullough & Associates: Comparing C# to Java - I Code in Both. Learn about the Differences and Similarities. - Development