Your SlideShare is downloading. ×
C# / Java Language Comparison
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

C# / Java Language Comparison

2,147

Published on

http://jsug.at/wiki/Meeting_39

http://jsug.at/wiki/Meeting_39

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,147
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
36
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. . . C# / Java Language Comparison Robert Bachmann April 4, 2011 1 / 22
  • 2. Outline My favorite pitfalls Common conventions Type system Generics Keywords Exceptions Speci c features of Java Speci c features of C# 2 / 22
  • 3. My favorite pitfalls str == "hello" Checks equality in C#. Checks identity in Java. Virtual methods Opt-out in Java (final keyword) vs. opt-in in C# (virtual keyword) Dates new GregorianCalendar(2011, 3, 4)1 vs. new DateTime(2011,4,4) 1 Hint: use YodaTime, Date4J, … 3 / 22
  • 4. Common conventions Package names / Namespaces: org.acme.foo vs. Acme.Foo Interfaces: Supplier vs. ISupplier Methods: doSomething vs. DoSomething Opening braces: Same line in Java vs. next line in C# 4 / 22
  • 5. Type system Basic types Java String Object boolean char short int long double oat byte — — — — C# string object bool char short int long double oat sbyte byte ushort uint ulong CLR Type String Object Boolean Char Int16 Int32 Int64 Double Single SByte Byte UInt16 UInt32 UInt64 5 / 22
  • 6. Type system Java has reference and primitive types. C# has reference and value types. Uses an uni ed type system, for example you can do 42.ToString() It’s possible to create custom value types: public struct Point { public int X { get; set; } public int Y { get; set; } public override string ToString () { return String . Format ("({0} ,{1})", X, Y); } } 6 / 22
  • 7. Generics Java uses type erasure. Generics are (mostly) a compiler feature. new ArrayList <Integer >(). getClass (); // -> ArrayList new ArrayList <String >(). getClass (); // -> ArrayList C# uses rei ed generics. Generics are a runtime feature. new List <int >(). GetType (); // -> List `1[ Int32 ] new List <string >(). GetType (); // -> List `1[ String ] 7 / 22
  • 8. Generics in Java Code: ArrayList <String > list1 = new ArrayList <String >(); list1 .add(" hello "); String s = list1 .get (0); ArrayList <Integer > list2 = new ArrayList <Integer >(); list2 .add (42); int i = list2 .get (0); Decompiled: ArrayList list1 = new ArrayList (); list1 .add(" hello "); String s = ( String ) list1 .get (0); ArrayList list2 = new ArrayList (); list2 .add( Integer . valueOf (42)); int i = (( Integer ) list2 .get (0)). intValue (); 8 / 22
  • 9. Generics in C# Code: List <string > list1 = new List <string >(); list1 .Add(" hello "); string s = list1 [0]; List <int > list2 = new List <int >(); list2 .Add (42); int i = list2 [0]; Decompiled: List <string > list = new List <string >(); list.Add(" hello "); string text = list [0]; List <int > list2 = new List <int >(); list2 .Add (42); int num = list2 [0]; 9 / 22
  • 10. Generics List factory method example public class ListFactory { public static <T> List <T> newList () { // ^^^ return new ArrayList <T >(); } } // use with List <String > list = ListFactory . newList (); 10 / 22
  • 11. Generics List factory method example public class ListFactory { public static IList <T> newList <T >() // ^^^ { return new List <T >(); } } // use with IList <int > list = ListFactory .newList <int >(); // Does not work: IList <int > list = ListFactory . newList (); // The type arguments for method // ListFactory .newList <T >() ' cannot be inferred // from the usage . // Try specifying the type arguments explicitly . 11 / 22
  • 12. Generics Constraints <T extends Comparable <T>> T max(T a, T b) { if (a. compareTo (b) > 0) return a; else return b; } T max <T >(T a, T b) where T : IComparable <T> { if (a. CompareTo (b) > 0) return a; else return b; } 12 / 22
  • 13. Generics Constraints where T : ClassOrInterface, same as T extends ClassOrInterface where T : new(), T has a parameterless constructor. where T : class, T is a reference type. where T : struct, T is a value type. 13 / 22
  • 14. Keywords Visibility Common: public, protected, and private Java: Package visibility. C#: internal and protected internal final vs. sealed (for methods and classes) final vs. readonly (for members) for (T item : items) vs. foreach (T item in items) instanceof vs. is Foo.class vs. typeof(Foo) 14 / 22
  • 15. Exceptions Java Must throw a Throwable Has checked and unchecked exceptions Re-throw with throw e; C# Must throw an Exception Has no checked exceptions Re-throw with throw; throw e; has a different semantic 15 / 22
  • 16. Speci c features of Java Anonymous inner classes static import 16 / 22
  • 17. Speci c features of C# First class properties using blocks Preprocessor Delegates and lambda expressions LINQ 17 / 22
  • 18. Speci c features of C# using blocks // using ( IDisposable ) static String ReadFirstLineFromFile ( String path) { using ( StreamReader reader = File. OpenText (path )) { return reader . ReadLine (); } } // http :// download .java.net/jdk7/docs/ technotes / // guides / language /try -with - resources .html // try ( AutoClosable ) static String readFirstLineFromFile ( String path) throws IOException { try ( BufferedReader br = new BufferedReader (new FileReader (path )) { return br. readLine (); } } 18 / 22
  • 19. Speci c features of C# Preprocessor public static void Main( string [] args) { #if DEBUG Console . WriteLine (" Debug ␣..."); # endif Console . WriteLine (" Hello "); } 19 / 22
  • 20. Speci c features of C# Delegates and lambda expressions public delegate bool Predicate <T>(T obj ); public static void Main( string [] args) { List <string > list = new List <string >{ " Hello ", " World ", "what 's", "up" }; Predicate <String > shortWord ; shortWord = delegate ( string s) { return s. Length < 4;}; shortWord = s => s. Length < 4; list.Find( shortWord ); // or just list.Find(s => s. Length < 4); } 20 / 22
  • 21. Speci c features of C# LINQ public static void Main( string [] args) { var list = new List <string > { " Hello ", " World ", "what 's", "up" }; var result = from item in list select item. Length ; foreach (int i in result ) { Console . WriteLine (i); // -> 5, 5, 6, 2 } } 21 / 22
  • 22. Speci c features of C# More features Operator overloading dynamic pseudo-type yield keyword, similar to Python Extension methods Expression trees Explicit interfaces Partial classes … See http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java 22 / 22

×