Comparing C# to Java - I Code in Both. Learn about the Differences and Similarities.

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
alt
McCullough & Associates
Youtube Blogger
alt

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