Java & C Sharp-Features Comparision

Data types Java C#
Single-root (unified) type system No Yes
Signed integers Yes; 8, 16, 32, 64 bits Yes; 8, 16, 32, 64 bits
Unsigned integers No Yes; 8, 16, 32, 64 bits
Character Yes Yes
Date/time Yes; reference type Yes; value type
IEEE 754 binary32 floating point number Yes Yes
IEEE 754 binary64 floating point number Yes Yes
High precision floating point number No; but see Arbitrary size decimals 128-bit (28 digits) Decimal type
Boolean type Yes Yes
Strings Immutable reference type, Unicode Immutable reference type, Unicode
Arbitrary size integers Reference type; no operators Yes
Arbitrary size decimals Reference type; no operators No
Complex numbers No Yes
Reference types Yes Yes
Arrays Yes Yes
Value types No; only primitive types Yes
Enumerated types Yes; reference type Yes; scalar
Lifted (nullable) types No; but wrapper types Yes
Tuples No Yes
Pointers No Yes
Reference types Java C#
Garbage collection Yes Yes
Weak references Yes Yes
Soft references Yes No
Proxy support Yes; proxy generation Yes; object contexts
Object initialization Bottom-up (fields and constructors) Top-down (fields); bottom-up (constructors)
Object orientation Java C#
Classes Yes Yes
Interfaces Yes Yes
Abstract classes Yes Yes
Member accessibility levels Public, package, private, protected Public, protected, internal, protected internal, private
Class level inner classes Yes Yes
Instance level inner classes Yes No
Partial classes No Yes
Deprecation/obsolescence Yes Yes
Overload versioning Some Yes
Properties No Yes
Events No Yes
Operators (operator overloading) No Yes
Indexers No Yes
Implicit conversions No Yes
Explicit conversions No Yes
Fields and initialization Java C#
Fields Yes Yes
Constants Yes Yes
Static (class) constructors Yes Yes
Instance constructors Yes Yes
Finalizers/destructors Yes Yes
Instance initializers Yes No
Hierarchy initialization Top-bottom, lexical order Top-bottom-top, lexical order
Object initializers No Yes
Collection initializers No; can be modelled Yes
Array initializers Yes Yes
Methods and properties Java C#
Virtual Virtual by default Non-virtual by default
Abstract Yes Yes
Sealing Yes Yes
Explicit interface implementation No Yes
Value (input) parameters Yes Yes
Reference (input/output) parameters No Yes
Output (output) parameters No Yes
Variadic methods Yes Yes
Optional arguments No Yes
Named arguments No Yes
Generator methods No Yes
Extension methods No Yes
Conditional methods No Yes
Partial methods No Yes
Generics Java C#
Reified generics No Yes
Co-variance Yes Yes
Contra-variance Yes Yes
Reference type constraint Yes; implicit Yes
Value/primitive type constraint No Yes
Constructor constraint No Yes
Relation constraint Yes Yes
Primitive/value type support No Yes
Migration compatibility Yes No
Functional programming Java C#
Delegates/method references No Yes
Closures/lambdas No; some use cases covered by anonymous inner classes Yes
Expression trees No Yes
Query expressions No Yes
Runtime (dynamic) binding Java C#
Late-bound (dynamic) type No Yes
Runtime type information and manipulation Java C#
Runtime type information Yes; but with type erasure Yes
Runtime generics realization No Yes
Runtime type construction No; third party tools exist Yes
Statements Java C#
Loops Yes Yes
Conditionals Yes Yes
Flow control Yes Yes
Assignment Yes Yes
Exception control Yes Yes
Variable declaration Yes Yes
Variable type inference No Yes
Deterministic disposal (ARM-blocks) No Yes
Expressions and operators Java C#
Arithmetic operators Yes Yes
Logical operators Yes Yes
Bitwise logic operators Yes Yes
Conditional Yes Yes
String concatenation Yes Yes
Casts Yes Yes
Boxing Yes; implicit Yes; implicit
Unboxing Yes; implicit Yes; explicit
Lifted operators No Yes
Overflow control No Yes
Strict floating point evaluation Yes; opt-in/out No
Local classes Yes No
Ad-hoc (anonymous) classes No Yes
Verbatim (here-)strings No Yes
Exceptions Java C#
Checked exceptions Yes No
Try-catch-finally Yes Yes
Arrays and collections Java C#
One-dimensional, zero-based index arrays Yes Yes
Rectangular (multidimensional) arrays No Yes
Jagged (arrays of arrays) arrays Yes Yes
Non-zero based arrays No Some
Unified arrays and collections No Yes
Maps/dictionaries Yes Yes
Sets Yes Yes
Lists/vectors Yes Yes
Maps Yes Yes
Queues/stacks Yes Yes
Bags/multisets Yes Yes
Metadata Java C#
Metadata annotations/attributes Interface based Class based
Positional arguments No; unless a single argument Yes
Named arguments Yes Yes
Default values At definition Through initialization
Nested types Yes Yes
Specialization No Yes
Conditional metadata No Yes
Preprocessing, compilation and packaging Java C#
Namespaces Packages Namespaces
Packaging Package Assembly
File contents
Restricted
Free
Conditional compilation No Yes
Custom errors/warnings No Yes
Explicit regions No Yes
Threading and synchronization Java C#
Native interoperability Java C#
External/native methods Yes Yes
Marshalling External glue code required Yes; metadata controlled
Pointers and arithmetics No Yes
Native types No Yes
Fixed size buffers No Yes
Explicit stack allocation No Yes
Address pinning (fixing) No Yes
Address-of No Yes
Object pinning (fix variable to address) No Yes

Source:wikipedia