Java mı? C# C Sharp mı? Karşılaştırma

Yazılıma merak salan herkes nereden başlamalıyım sorusunu kendine sorar ve sonra ise çevrelerine. Genellikle bu soru dönüp dolaşıp Java’da mı yoksa C# da mı kendimi geliştirmeliyim diye sorulur. Bu sorunun cevabını bulmak çok zor aslında. Objektif olmakta baya bir zor. Yapacağımız projenin ihtiyacına göre yazılım dili seçmek, kendini geliştirmek başlamak için en mantıklı olanı.

Aşağıda ki tablolar C Sharp ve Java’nın detaylı olarak karşılaştırılması var.  Tercih sizin.

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 decimal number No 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 and Phantom references Yes No
Proxy support Yes; proxy generation Yes; object contexts

 

Object orientation Java C#
Classes Yes Yes
Interfaces Yes Yes
Abstract classes Yes Yes
Member accessibility levels Public, package, protected, private Public, internal, protected, private, protected internal
Class-level inner classes Yes Yes
Instance-level inner classes Yes No
Partial classes No Yes
Statement-level anonymous classes Yes No
Implicit (inferred) anonymous classes No Yes
Deprecation/obsolescence Yes Yes
Overload versioning Some Yes
Properties No, but see JavaBeans spec Yes
Events No; but the base class library does feature an event mechanism Yes
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
Object initialization Bottom-up (fields and constructors) Top-down (fields); bottom-up (constructors)
Object initializers No Yes
Collection initializers No; can be modelled Yes
Array initializers Yes Yes

 

Methods and properties Java C#
Static imports Yes No
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#
Implementation Type erasure Reification
Runtime realization No Yes
Covariance Yes Yes
Contravariance 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#
Method references No; but see Delegates / method references Yes
Closures/lambdas No; but see Delegates / method references Yes
Expression trees No Yes
Generic query language 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) Yes (starting with Java 7) 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
Verbatim (here-)strings No Yes

 

Exceptions Java C#
Checked exceptions Yes No
Try-catch-finally Yes Yes

 

Arrays and Collections Java C#
Abstract data types Yes Partial
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
Sorted dictionaries Yes Yes[2]
Sets Yes Yes
Sorted sets Yes Yes[3]
Lists/vectors Yes Yes
Queues/stacks Yes Yes
Priority queue Yes No
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
Classes/assembly search path Yes; ClassPath No; /lib
File contents
Restricted
Free
Conditional compilation No Yes
Custom errors/warnings No Yes
Explicit regions No Yes

*

Threading and Synchronization Java C#
Threads Yes Yes
Thread pool Yes Yes
Task-based parallelism No[4] Yes[5]
Semaphores Yes Yes
Monitors Yes Yes
Thread local variables Yes Yes; ThreadStaticAttribute

 

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-of No Yes
Object pinning (fix variable to address) No Yes

 

Platform support Java C#
Linux Yes Yes
Mac OS X Yes Yes
Solaris Yes Yes
FreeBSD Yes Yes
AIX Yes Partial?
iOS Yes Yes
Windows Yes Yes
Windows Mobile Yes Yes
Windows Phone Yes Yes
Android Yes Yes
Feature phones Yes No
Symbian Yes No
Blackberry Yes No

Karşılaştırma tabloları Vikipedia’dan alınmıştır. Daha detaylı bilgi için tıklayın

6 comments

  1. aykut

    sonuçlar bana c# ın daha çok yes verisine sahip olduğunu gösteriyor peki neden java nın hakimiyeti giderek güçleniyor.

    • Burak
      Author

      Bunun en büyük nedeni Java ile geliştirilen projelerde maliyetin C Sharp’a göre az olmasından kaynaklı.

      • Hakan

        Java ile geliştirilen projelerin maliyeti nasıl daha az oluyor? Diyelim ki ben finans şirketi için uygulama geliştireceğim. DB olarak oracle seçtim. App.server weblogic. Bu teknolojiler üzerine ister C# ile yazarım ister java ile? Arada ne gibi (ciddi derecede) maliyet farkı olur?C# kullansam VS almak zorundayım, java ile geliştirsem mesela Rational App Developer almalıyım. Nedir çok büyük fark? Öğrenmek için soruyorum..

  2. Muallim

    Java için IDE almana gerek yok, Eclipse IDE’yi her yönden genişletebilirsin. Zaten bahsettiğiniz IDE de Eclipse üzerine geliştirilmiştir.

    Bazı kriterleri aynı tuttuğunuzda maliyette fazla bir fark görülmeyebilir. Oracle yerine PostgreSQL veya MySQL kullanırsan maliyet değşir. Fakat C# için genelde SQL Server kullanılıyor. Bu da maliyet demek.

    C#’ı Visual Studio haricinde hangi IDE’de aynı kalitede ve rahatlıkta kullanabilirsiniz. Bu da Windows’a bağlı kalmanız demek, Windows satın alacaksınız, bir ek maliyet daha. Java için geliştirilen ve şu an en çok kullanılan her IDE’yi ufak tefek ayarlarla diğer işletim sistemlerinde de aynen kullanabiliyorsunuz, maliyet yok. Ayrıca bahsettiğiniz türden IDE bile alsanız, o IDE de platform bağımsız olduğundan, işletim sistemi maliyeti yine olmayacak. Tabi Windows’a bağlı kalmak isterseniz o başka.

    IDE, Componentler ve diğer araç-gereçler C# için çoğunlukla ücretlidir. Fakat Java’da böyle bir şeye ihtiyaç duyduğunuzda istemediğiniz kadar çok açık kaynak yazılım bulursunuz. C# için bir maliyette burdan.

    Son yıllarda yavaş yavaş hosting alanında hareketlenme var Java için. C# bu yönden üstündü, bu da Java için bir maliyetti. Bu da değişirse Java daha da çok cazip gelmeye başlar.

    Ayrıca C# ve Java temelde çok benzer olduklarından birini iyi derecede bilen diğerini çok kısa sürede öğrenir. Programcı esnek olmalı, gerektiğinde ideolojik açıdan karşıt ama temelde aynı teknolojiyi de kullanabilmeli.

  3. Fırat

    C# ile geliştirme yapmanın Java’dan pahalı olduğunu söylersen bende sana acemi derim. C# geliştiricileri ele ayağa düşmüşken asgari ücrete C# bilen çalıştırılabilirken bak bir piyasaya Java’cıların maaşlarına ?

    Oracle, WebLogic, IBM RAD, falan filan bayağı masraflı teknolojilerdir. Tersine .Net iyi olduğu için değil Oracle’a göre nispeten daha ucuz çözüm ve daha az maaş alan elaman sunduğu için tercih ediliyor.

  4. hakan

    Bence de teknolojiler düşünüldüğünde eğer java tarafı bir miktar daha ucuz olabileceği gibi daha (açık kaynak ve bedava olan toollar) profesyonel çözümler düşünülürse (web logic, IBM rad, websphere, oracle db vs..) java daha pahalıya gelebilir. Programcı maliyeti açısından bakılırsa yazılım evleri kafadan .net’çi seçer genelde tabi.. Daha ucuza adam bulabilirler çünkü.
    Ancak şöyle bir gerçek var. Java’da daha özgürsünüz. IDE’de seçenek çok, app server’da seçenek çok. DB.de diğer tool ve framework.lerde seçenek çok. Bilgi alabileceğiniz kaynak da daha çok. Ve iyi bir javacı iseniz hiç para ödemeden ve legal olarak tabi çok ciddi yazılım projeleri geliştirebilir ve satabilirsiniz de…

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir