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

Makale Yazılım Mühendisliği

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 typesJavaC#
Single-root (unified) type systemNoYes
Signed integersYes; 8, 16, 32, 64 bitsYes; 8, 16, 32, 64 bits
Unsigned integersNoYes; 8, 16, 32, 64 bits
CharacterYesYes
Date/timeYes; reference typeYes; value type
IEEE 754 binary32 floating point numberYesYes
IEEE 754 binary64 floating point numberYesYes
High precision decimal numberNo128-bit (28 digits) Decimal type
Boolean typeYesYes
StringsImmutable reference type, UnicodeImmutable reference type, Unicode
Arbitrary size integersReference type; no operatorsYes
Arbitrary size decimalsReference type; no operatorsNo
Complex numbersNoYes
Reference typesYesYes
ArraysYesYes
Value typesNo; only primitive typesYes
Enumerated typesYes; reference typeYes; scalar
Lifted (nullable) typesNo; but wrapper typesYes
TuplesNoYes
PointersNoYes

 

Reference typesJavaC#
Garbage collectionYesYes
Weak referencesYesYes
Soft and Phantom referencesYesNo
Proxy supportYes; proxy generationYes; object contexts

 

Object orientationJavaC#
ClassesYesYes
InterfacesYesYes
Abstract classesYesYes
Member accessibility levelsPublic, package, protected, privatePublic, internal, protected, private, protected internal
Class-level inner classesYesYes
Instance-level inner classesYesNo
Partial classesNoYes
Statement-level anonymous classesYesNo
Implicit (inferred) anonymous classesNoYes
Deprecation/obsolescenceYesYes
Overload versioningSomeYes
PropertiesNo, but see JavaBeans specYes
EventsNo; but the base class library does feature an event mechanismYes
Operator overloadingNoYes
IndexersNoYes
Implicit conversionsNoYes
Explicit conversionsNoYes

 

Fields and initializationJavaC#
FieldsYesYes
ConstantsYesYes
Static (class) constructorsYesYes
Instance constructorsYesYes
Finalizers/destructorsYesYes
Instance initializersYesNo
Object initializationBottom-up (fields and constructors)Top-down (fields); bottom-up (constructors)
Object initializersNoYes
Collection initializersNo; can be modelledYes
Array initializersYesYes

 

Methods and propertiesJavaC#
Static importsYesNo
VirtualVirtual by defaultNon-virtual by default
AbstractYesYes
SealingYesYes
Explicit interface implementationNoYes
Value (input) parametersYesYes
Reference (input/output) parametersNoYes
Output (output) parametersNoYes
Variadic methodsYesYes
Optional argumentsNoYes
Named argumentsNoYes
Generator methodsNoYes
Extension methodsNoYes
Conditional methodsNoYes
Partial methodsNoYes

 

GenericsJavaC#
ImplementationType erasureReification
Runtime realizationNoYes
CovarianceYesYes
ContravarianceYesYes
Reference type constraintYes; implicitYes
Value/primitive type constraintNoYes
Constructor constraintNoYes
Relation constraintYesYes
Primitive/value type supportNoYes
Migration compatibilityYesNo

 

Functional programmingJavaC#
Method referencesNo; but see Delegates / method referencesYes
Closures/lambdasNo; but see Delegates / method referencesYes
Expression treesNoYes
Generic query languageNoYes

 

Runtime (dynamic) bindingJavaC#
Late-bound (dynamic) typeNoYes

 

Runtime type information and manipulationJavaC#
Runtime type informationYes; but with type erasureYes
Runtime generics realizationNoYes
Runtime type constructionNo; third party tools existYes

 

StatementsJavaC#
LoopsYesYes
ConditionalsYesYes
Flow controlYesYes
AssignmentYesYes
Exception controlYesYes
Variable declarationYesYes
Variable type inferenceNoYes
Deterministic disposal (ARM-blocks)Yes (starting with Java 7)Yes

 

Expressions and operatorsJavaC#
Arithmetic operatorsYesYes
Logical operatorsYesYes
Bitwise logic operatorsYesYes
ConditionalYesYes
String concatenationYesYes
CastsYesYes
BoxingYes; implicitYes; implicit
UnboxingYes; implicitYes; explicit
Lifted operatorsNoYes
Overflow controlNoYes
Strict floating point evaluationYes; opt-in/outNo
Verbatim (here-)stringsNoYes

 

ExceptionsJavaC#
Checked exceptionsYesNo
Try-catch-finallyYesYes

 

Arrays and CollectionsJavaC#
Abstract data typesYesPartial
One-dimensional, zero-based index arraysYesYes
Rectangular (multidimensional) arraysNoYes
Jagged (arrays of arrays) arraysYesYes
Non-zero based arraysNoSome
Unified arrays and collectionsNoYes
Maps/dictionariesYesYes
Sorted dictionariesYesYes[2]
SetsYesYes
Sorted setsYesYes[3]
Lists/vectorsYesYes
Queues/stacksYesYes
Priority queueYesNo
Bags/multisetsYesYes

 

MetadataJavaC#
Metadata annotations/attributesInterface basedClass based
Positional argumentsNo; unless a single argumentYes
Named argumentsYesYes
Default valuesAt definitionThrough initialization
Nested typesYesYes
SpecializationNoYes
Conditional metadataNoYes

 

Preprocessing, Compilation and PackagingJavaC#
NamespacesPackagesNamespaces
PackagingPackageAssembly
Classes/assembly search pathYes; ClassPathNo; /lib
File contents
Restricted
Free
Conditional compilationNoYes
Custom errors/warningsNoYes
Explicit regionsNoYes

*

Threading and SynchronizationJavaC#
ThreadsYesYes
Thread poolYesYes
Task-based parallelismNo[4]Yes[5]
SemaphoresYesYes
MonitorsYesYes
Thread local variablesYesYes; ThreadStaticAttribute

 

Native interoperabilityJavaC#
External/native methodsYesYes
MarshallingExternal glue code requiredYes; metadata controlled
Pointers and arithmeticsNoYes
Native typesNoYes
Fixed-size buffersNoYes
Explicit stack allocationNoYes
Address-ofNoYes
Object pinning (fix variable to address)NoYes

 

Platform supportJavaC#
LinuxYesYes
Mac OS XYesYes
SolarisYesYes
FreeBSDYesYes
AIXYesPartial?
iOSYesYes
WindowsYesYes
Windows MobileYesYes
Windows PhoneYesYes
AndroidYesYes
Feature phonesYesNo
SymbianYesNo
BlackberryYesNo

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

6 Comments

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

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

      1. 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. 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. 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. 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…

Leave a Reply

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

Burak KUTBAY 2010 - 2019
%d blogcu bunu beğendi: