c vs java top 30 differences between c
Denna djupgående handledning förklarar några av de viktigaste skillnaderna mellan två objektorienterade programmeringsspråk C ++ mot Java:
C ++ och Java är båda objektorienterade programmeringsspråk. Ändå skiljer sig båda språken från varandra på många sätt.
C ++ härrör från C och har funktionerna i både procedur- och objektorienterade programmeringsspråk. C ++ designades för applikations- och systemutveckling.
Java bygger på en virtuell maskin som är mycket säker och mycket bärbar till sin natur. Den är grupperad med ett omfattande bibliotek för att ge stöd för abstraktion av den befintliga plattformen.
Java var huvudsakligen utformat för applikationsprogrammering och har en funktionalitet som en tolk för utskriftssystem som senare utvecklades till nätverksberäkning.
Föreslagen läsning => C ++ träningsguide för alla
Vad du kommer att lära dig:
- Viktiga skillnader mellan C ++ och Java
- Tabellformat: C ++ mot Java
- Vanliga frågor i C ++ och Java
- Slutsats
- Rekommenderad läsning
Viktiga skillnader mellan C ++ och Java
Låt oss nu diskutera några av de viktigaste skillnaderna mellan C ++ Vs Java, när vi fortsätter i detta
handledning.
# 1) Plattform Oberoende
C ++ | Java | ||
---|---|---|---|
7 | Biblioteksgränssnitt | Tillåter direkta samtal till inbyggda systembibliotek. | Samtal endast via Java Native-gränssnitt och Java Native Access. |
C ++ är ett plattformsberoende språk. Källkoden skriven i C ++ måste kompileras på varje plattform. | Java är plattformsoberoende. När den väl har kompilerats i byte-kod kan den köras på vilken plattform som helst. |
# 2) Kompilator och tolk
C ++ | Java |
---|---|
C ++ är ett sammanställt språk. Källprogrammet skrivet i C ++ kompileras till en objektkod som sedan kan köras för att producera en utdata. | Java är ett sammanställt såväl som ett tolkat språk. Den sammanställda utgången från en Java-källkod är en byte-kod som är plattformsoberoende. |
# 3) Bärbarhet
C ++ | Java |
---|---|
C ++ -koden är inte bärbar. Den måste sammanställas för varje plattform. | Java översätter dock koden till byte-kod. Denna byte-kod är bärbar och kan köras på vilken plattform som helst. |
# 4) Minneshantering
C ++ | Java |
---|---|
Minneshantering i C ++ är manuell. Vi måste allokera / avdela minne manuellt med de nya / radera operatörerna. | I Java är minneshanteringen systemstyrd. |
# 5) Flera arv
C ++ | Java |
---|---|
C ++ stöder olika typer av arv inklusive enstaka och flera arv. Även om det finns problem som härrör från flera arv, använder C ++ det virtuella nyckelordet för att lösa problemen. | Java stöder endast enstaka arv. Effekter av flera arv kan uppnås med hjälp av gränssnitten i Java. |
# 6) Överbelastning
C ++ | Java |
---|---|
I C ++ kan metoder och operatörer överbelastas. Detta är statisk polymorfism. | I Java är endast metodöverbelastning tillåten. Det tillåter inte operatörens överbelastning. |
# 7) Virtuellt nyckelord
C ++ | Java |
---|---|
Som en del av dynamisk polymorfism, i C ++, används det virtuella nyckelordet med en funktion för att indikera den funktion som kan åsidosättas i den härledda klassen. På så sätt kan vi uppnå polymorfism. | I Java saknas det virtuella nyckelordet. Men i Java kan alla icke-statiska metoder som standard åsidosättas. Eller i enkla termer, alla icke-statiska metoder i Java är virtuella som standard. |
# 8) Pekare
C ++ | Java |
---|---|
C ++ handlar om pekare. Som ses i handledning tidigare har C ++ starkt stöd för pekare och vi kan göra mycket användbar programmering med hjälp av pekare. | Java har begränsat stöd för pekare. Ursprungligen var Java helt utan pekare men senare versioner började ge begränsat stöd för pekare. Vi kan inte använda pekare i Java så lugnt som vi kan använda i C ++. |
# 9) Dokumentationskommentar
C ++ | Java |
---|---|
C ++ har inget stöd för dokumentationskommentarer. | Java har ett inbyggt stöd för dokumentationskommentarer (/ ** ... * /). På så sätt kan Java-källfiler ha sin egen dokumentation. |
# 10) Trådstöd
C ++ | Java |
---|---|
C ++ har inte inbyggt trådstöd. Det är mest beroende av trådbibliotek från tredje part. | Java är inbyggt trådstöd med en klass 'tråd'. Vi kan ärva trådklassen och sedan åsidosätta körningsmetoden. |
Några fler skillnader ...
# 11) Rothierarki
C ++ är procedurellt såväl som ett objektorienterat programmeringsspråk. Därför följer den inte någon specifik rothierarki.
Java är ett rent objektorienterat programmeringsspråk och har en enda rothierarki.
# 12) Källkod och klassförhållande
I C ++ har både källkoden och filnamnet ingen relation. Det betyder att vi kan ha många klasser i C ++ - programmet och filnamnet kan vara vad som helst. Det behöver inte vara detsamma som klassnamnen.
I Java finns det en nära relation mellan källkodsklassen och filnamnet. Klassen som innehåller källkoden och filnamnet ska vara densamma.
Till exempel , om vi har en klass i Java som heter lön, bör filnamnet som innehåller denna klasskod vara “lön.java”.
# 13) Begrepp
Konceptet bakom C ++ - program skrivs en gång och kompileras var som helst eftersom C ++ inte är plattformsoberoende.
Tvärtom, för Java-program skrivs den en gång, körs överallt och var som helst eftersom bytekoden som genereras av Java-kompilatorn är plattformsoberoende och kan köras på vilken maskin som helst.
# 14) Kompatibilitet med andra språk
C ++ bygger på C. C ++ språk är kompatibelt med de flesta andra högnivåspråk.
Java är inte kompatibelt med andra språk. Eftersom Java inspirerades av C och C ++ liknar dess syntax dessa språk.
#femton) Typ av programmeringsspråk
C ++ är både ett procedur- och objektorienterat programmeringsspråk. Följaktligen har C ++ funktioner som är specifika för processpråk såväl som funktioner för objektorienterat programmeringsspråk.
Java är ett helt objektorienterat programmeringsspråk.
# 16) Biblioteksgränssnitt
C ++ tillåter direkta samtal till de inbyggda systembiblioteken. Därför är det mer lämpligt för programmering på systemnivå.
Java har inget direkt samtalsstöd till sina inbyggda bibliotek. Vi kan ringa biblioteken via Java Native Interface eller Java Native Access.
# 17) Utmärkande egenskaper
Funktioner relaterade till de processuella språken och det objektorienterade språket kännetecknar C ++.
gratis databasprogramvara för Windows 10
Automatisk skräpsamling är kännetecknet för Java. Under tiden stöder Java inte destruktörer.
# 18) Skriv semantik
När det gäller typsemantik för C ++ är primitiva och objekttyper konsekventa.
Men för Java finns det ingen enhetlighet mellan primitiva och objekttyper.
# 19) Ingångsmekanism
C ++ använder cin och cout tillsammans med '>>' och '<<’ operators respectively to read in and write the data.
I java används systemklassen för input-output. För att läsa ingången används System.in som läser en byte åt gången. Konstruktionen System.out används för att skriva utdata.
#tjugo) Åtkomstkontroll och objektskydd
C ++ har en flexibel modell för objekt med åtkomstspecifikatorer som styr åtkomst och stark inkapsling säkerställer skydd.
Java har en relativt besvärlig objektmodell med svag inkapsling.
#tjugoett) Gå till uttalande
C ++ stöder goto-uttalandet, men användningen bör minimeras för att förhindra konsekvenserna av att använda det i ett program.
Java tillhandahåller inte stöd för goto-uttalandet.
# 22) Omfattningsoperatör
Scope resolution operator används för att komma åt de globala variablerna och definiera metoder utanför klassen.
C ++ stöder operatör för upplösningsomfång eftersom den använder den för att komma åt globala variabler. Det gör det också möjligt för oss att definiera funktioner utanför klassen och komma åt dem med hjälp av operatören för upplösning av omfång.
Däremot stöder Java inte operatören för omfångsupplösning. Java tillåter inte att definiera funktionerna utanför. Allt som är relaterat till programmet inklusive huvudfunktionen måste vara i en klass.
# 2. 3) Försök / fånga block
I C ++ kan vi utesluta try / catch-blocket även om vi vet att koden kan kasta ett undantag.
Men i Java, om vi är säkra på att koden kommer att ge ett undantag, måste vi inkludera den här koden under försök / fångstblocket. Undantag är olika i Java eftersom det inte stöder destruktörer.
# 24) Runtime Error Detection
I C ++ är detektering av runtime-fel programmerarens ansvar.
I Java styrs detekteringen av körtidsfel av systemet.
# 25) Språkstöd
På grund av sin närhet till hårdvara och bibliotek som tillåter åtkomst till systemresurser är C ++ mer lämplig för systemprogrammering även om vi har ett brett utbud av applikationer inklusive databas, företag, spel etc. utvecklade i C ++.
# 26) Data och funktioner
C ++ har ett globalt omfång såväl som ett namnområde. Således kan data och funktioner också finnas utanför klassen.
I Java måste alla data och funktioner ingå i klassen. Det finns inget globalt omfång, men det kan finnas paketomfång.
# 27) Strukturer och fackföreningar
Strukturer och fackföreningar är datastrukturer som kan ha medlemmar med olika datatyper. C ++ stöder både strukturer och fackföreningar.
Java stöder dock inte strukturer eller fackföreningar.
# 28) Objekthantering
I C ++ hanteras objekt manuellt. Skapandet och förstörelsen av objekt utförs manuellt med hjälp av de nya respektive raderingsoperatorerna. Vi använder också konstruktörer och förstörare för klassobjekt.
Java stöder inte förstörare men stöder konstruktörer. Java är också starkt beroende av automatisk sopuppsamling för att samla in och förstöra föremål.
# 29) Parameter passerar
Pass by Value och pass by reference är de två viktiga teknikerna för parameteröverföring som används vid programmering. C ++ stöder båda dessa tekniker.
Java stöder dock endast pass by Value-teknik för parameteröverföring.
# 30) Hårdvara
C ++ är nära hårdvara och har många bibliotek som kan manipulera hårdvaruresurserna. På grund av dess närhet till hårdvara används C ++ ofta för systemprogrammering, spelapplikationer, operativsystem och kompilatorer.
Java är främst ett applikationsutvecklingsspråk och ligger inte nära hårdvaran.
Tabellformat: C ++ mot Java
Nedan följer en tabellföreställning av jämförelsen mellan C ++ och Java som vi redan har diskuterat.
Nej. | Jämförelse Parameter | C ++ | Java |
---|---|---|---|
ett | Plattformsoberoende | C ++ är plattformberoende. | Java är plattformsoberoende. |
två | Kompilator & tolk | C ++ är ett sammanställt språk. | Java är ett sammanställt såväl som ett tolkat språk. |
3 | Källkod och klassförhållande | Ingen strikt relation med klassnamn och filnamn. | Tillämpar strikt förhållande mellan klassnamnet och filnamnet. |
4 | Begrepp | Skriv en gång kompilera var som helst. | Skriv en gång kör var som helst och överallt. |
5 | Kompatibilitet med andra språk | Kompatibel med C förutom objektorienterade funktioner. | Syntaksen är hämtad från C / C ++. Ingen bakåtkompatibilitet med något annat språk. |
6 | Typ av programmeringsspråk | Procedurell och objektorienterad. | Objektorienterad. |
8 | Rothierarki | Ingen rothierarki. | Följer enstaka rothierarki. |
9 | Utmärkande egenskaper | Stöder både processuella och objektorienterade funktioner. | Inga förstörare. Automatisk sopuppsamling. |
10 | Bärbarhet | C ++ -koden är inte bärbar. | Java är bärbart. |
elva | Skriv semantik | Konsekvent mellan primitiva och objekttyper. | Inte konsekvent. |
12 | Ingångsmekanism | Cin och Cout används för I / O. | System.in och System.out.println |
13 | Åtkomstkontroll och objektskydd | En flexibel objektmodell och konsekvent skydd. | Objektmodellen är besvärlig och inkapslingen är svag. |
14 | Minneshantering | Handbok | Systemstyrd. |
femton | Flera arv | Närvarande | Frånvarande |
16 | Gå till uttalande | Stöder Goto-uttalande. | Stöder inte goto-uttalandet. |
17 | Omfattningsoperatör | Närvarande | Frånvarande |
18 | Försök / fånga block | Kan utesluta försök / fångstblock. | Kan inte utesluta om koden ska ge ett undantag. |
19 | Överbelastning | Stöder överbelastning av operatör och metod. | Stöder inte överbelastning av operatören. |
tjugo | Virtuellt nyckelord | Stöder virtuellt nyckelord som underlättar åsidosättande. | Inget virtuellt nyckelord, alla icke-statiska metoder är som standard virtuella och kan åsidosättas. |
tjugoett | Runtime Error Detection | Vänster till programmeraren. | Systemansvar |
22 | Språkstöd | Används främst för systemprogrammering. | Används främst för applikationsprogrammering. |
2. 3 | Data och funktioner | Data och funktion finns utanför klassen. Globala omfattningar och namnområden stöds. | Data och funktioner finns bara i klassen, paketets omfång är tillgängligt. |
24 | Pekare | Stöder pekare. | Endast begränsat stöd för pekare. |
25 | Strukturer och fackföreningar | Stöds | Stöds inte |
26 | Objekthantering | Manuell objekthantering med nytt och radera. | Automatisk objekthantering med skräpuppsamling. |
27 | Parameter passerar | Stöder samtal efter värde och samtal med referens. | Stöder endast samtal efter värde. |
28 | Trådstöd | Trådstödet är inte särskilt starkt, det är beroende av tredje part. | Mycket starkt trådstöd. |
29 | Hårdvara | Närmare hårdvaran. | Inte särskilt interaktiv med hårdvara. |
30 | Dokumentationskommentar | Stöder inte dokumentationskommentarer. | Stöder dokumentationskommentarer (/ ** ... * /) som skapar dokumentation för Java-källkod. |
Hittills har vi sett viktiga skillnader mellan C ++ och Java i detalj. Det kommande avsnittet kommer att besvara några av de vanliga frågorna om C ++ och Java i programmeringsvärlden.
Vanliga frågor i C ++ och Java
F # 1) Vilken är bättre C ++ eller Java?
Svar: Vi kan inte definitivt säga vilken som är bättre. Både C ++ och Java har sina egna fördelar och nackdelar. Medan C ++ mestadels är bra för systemprogrammering kan vi inte göra det med Java. Men Java utmärker sig i applikationer som webb, skrivbord etc.
Faktum är att C ++ kan göra allt från systemprogrammering till företag till spel. Java kan göra mer av en webb eller ett företag. Det finns vissa applikationer som vissa programmeringsapplikationer på låg nivå eller spel etc. som inte kan lämnas för Java att utvecklas.
Således beror det helt på vilken applikation vi utvecklar. Det bästa sättet är att i förväg utvärdera fördelarna och nackdelarna med båda språken och verifiera deras unika egenskaper för den applikation som vi utvecklar och sedan dra slutsatsen om vilken som är bäst.
F # 2) Är C ++ kraftfullare än Java?
Svar: Återigen är detta en knepig fråga! När det gäller hur lättare det är att använda syntaxen eller lära sig språket får Java poäng. När det gäller systemprogrammering och / eller andra applikationer på låg nivå är C ++ kraftfullare.
Vissa människor kan argumentera för att ha automatiska GC-samlingar, inga pekare, inga flera arv gör Java mer kraftfullt.
Men när det gäller hastighet är C ++ kraftfull. Även i applikationer som spel där vi behöver lagra staten kan automatisk skräpsamling förstöra uppgifterna. Således är C ++ uppenbarligen kraftfull här.
F # 3) Kan vi lära oss Java utan att känna till C eller C ++?
Svar: Ja definitivt!
När vi väl känner till grunderna för programmering och objektorienterade programmeringskoncept kan vi börja lära oss Java.
F # 4) Är C ++ som Java?
Svar: På vissa sätt, ja men på vissa sätt, nej.
Som till exempel är både C ++ och Java objektorienterade programmeringsspråk. De kan användas för applikationsutveckling. De har liknande syntax.
Men i andra fall som minneshantering, arv, polymorfism etc. är C ++ och Java helt olika. På samma sätt, när det gäller primitiva datatyper, objekthantering, pekare etc. är båda språken olika.
F # 5) Är Java skrivet i C ++?
Svar: Java i den meningen Java Virtual Machine (JVM) av Sun och IBM är skrivet i C ++. Java-biblioteken finns i Java. Några andra JVM är skrivna i C.
Slutsats
C ++ och Java är båda objektorienterade programmeringsspråk. Dessutom är C ++ också ett procedurspråk. Det finns några funktioner som arv, polymorfism, pekare, minneshantering etc. där båda språken skiljer sig helt från varandra.
Det finns några egenskaper hos C ++ som närhet till hårdvara, bättre objekthantering, hastighet, prestanda, etc. vilket gör den mer kraftfull än Java och därmed motiverar utvecklarna att använda C ++ för lågnivåprogrammering, höghastighetsspelapplikationer, systemprogrammering , etc.
På liknande sätt gör Java enklare syntax, automatisk skräpsamling, brist på pekare, mallar etc. Java till en favorit för webbaserade applikationer.
=> Besök här för en fullständig C ++ tutorials lista .
Rekommenderad läsning
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Java-gränssnitt och abstrakt klasshandledning med exempel
- OOP Java: Introduktion till objektorienterad programmering i Java
- Åtkomstmodifierare i Java - Handledning med exempel
- Java-distribution: Skapande och utförande av Java JAR-fil
- Introduktion till Java-programmeringsspråk - Videohandledning
- Java Virtual Machine: Hur JVM hjälper till att köra Java-applikationen
- Java Reflection Tutorial med exempel