Java vs C++: was sind die Unterschiede?

Wer gerne eine Programmiersprache lernen möchte, der sollte sich zuerst einmal entscheiden, welche Sprache er erlernen möchte. Hier gibt es eine stetig wachsende Auswahl. 

Auch die etlichen Kategorien der unterschiedlichen Programmiersprachen machen einem die Auswahl nicht immer leicht. Objektorientiert, Assembler- oder Skriptsprache und viele mehr gehören dazu. 

Zwei der beliebtesten und bekanntesten Programmiersprachen sind jedoch Java (im Beitrag kurz JV) und C++ (auch CPP). Deshalb stellt sich die Frage, wo genau die Unterschiede bei beiden Sprachen liegen, für welche Anwendungszwecke sie sich eignen und welche Vor- und Nachteile diese jeweils besitzen.

Java – anfängerfreundlich und Objektorientiert

Viele Nutzer, die einen Einstieg in die Welt des Programmierens suchen, starten ihre ersten Gehversuche mit Java. Denn die Sprache ist eine sogenannte objektorientierte Programmiersprache und funktioniert zudem vollständig plattformunabhängig. Es wird lediglich die Java-Laufzeitumgebung von der Firma Sun Microsystems benötigt.

Mit Java geschriebene Anwendungen laufen sowohl auf Windows wie auch auf Apple-Betriebssystemen und den verschiedenen Linux-Systemen. Selbst unterschiedliche Prozessorunterbauten werden unterstützt wie beispielsweise ARM oder x86.

Diese vollständige Modularität, welche die Sprache mit sich bringt, wird durch eine VM (Virtual Machine) realisiert. Diese virtuelle Maschine funktioniert dabei, fast wie ein echtes Betriebssystem. Die VM ist in der entsprechenden Laufzeitumgebung integriert und simuliert dabei immer das entsprechende Betriebssystem.

Vor- und Nachteile von JV

Wie auch C++ ist auch die Java-Sprache eine objektorientierte Programmiersprache. Das heißt im Klartext, dass alles in zwei Bestandteile aufgeteilt wird. Zum einen der Code mit den integrierten Funktionen und zum anderen die sogenannten Datenelemente, also die Objekte. 

Die Trennung in Klassen und Objekte erleichtert vor allem Anfängern das Verständnis der Sprache. Auch eine große mitgelieferte Bibliothek an unterschiedlichen Objekten für Grafik- und Tonanwendungen erleichtern den Einstieg ins Programmieren deutlich. 

Im Vergleich zu anderen Sprachen erfolgt hier auch die Speicherverteilung automatisch. Bei Sprachen wie C oder C# hingegen, muss die Speicherverteilung durch den Nutzer erfolgen. 

Der letzte große Vorteil ist natürlich die Plattformunabhängigkeit. Auch diese Eigenschaft weisen nicht sehr viele Programmiersprachen auf.

Leider besitzt die Sprache auch einige Nachteile. Durch die VM und die Eigenschaften der Sprache kann es gelegentlich zu Verzögerungen im Hinblick auf die Programmausführung kommen. Wenn es also um präzise und zeitlich genaue Ausführen von Befehlen geht, dann ist diese Sprache weniger geeignet. 

Somit ist der größte Vorteil der Sprache gleichzeitig auch der größte Nachteil. Denn im Vergleich zu anderen Sprachen reagiert Java deutlich langsamer in der Ausführung, was von vielen Nutzern als Kritikpunkt gesehen wird.

Wofür eignet sich die Sprache?

Die Sprache eignet sich perfekt für alle plattformunabhängigen Anwendungen, welche keine besondere Hardwarenähe aufweisen. 

Besonders im Unternehmensumfeld ist die Sprache perfekt, um Anwendungen zu bauen, welche kein bestimmtes Betriebssystem benötigen und somit komplett flexibel sind.

C++ – die objektorientierte Programmiersprache für fortgeschrittene

Auch C++ zählt zu den objektorientierten Programmiersprachen und ist ähnlich wie Java recht anfängerfreundlich. Wer mit C++ den Einstieg in die Welt des Programmierens versucht, der kann auch die fortgeschrittenen Techniken erst mal vernachlässigen. 

Denn prinzipiell ist die Sprache etwas komplexer und eigentlich eher weniger für Anfänger geeignet. Die Sprache bringt ebenfalls viele Bibliotheken und Ressourcen mit, welche von Anfang an dabei sind. C++ ist eine relativ maschinennahe Programmiersprache, was sie von anderen objektorientierten Sprachen unterscheidet. 

Dafür besitzt C++ viele Eigenschaften von anderen Sprachen. Das bedeutet im Klartext, wer sich in der Sprache auskennt, wird recht schnell den Einstieg in andere Sprachen finden. Die Sprache ist jedoch nicht so plattformunabhängig wie Java. Hier gibt es keine VM, welche zum Einsatz kommt. Zudem erfolgt die Speicherverwaltung hier manuell und nicht automatisch.

Die Vor- und Nachteile von CPP

Der große Vorteil bei dieser Sprache ist, dass sie besonders schnell und effizient ist. Zudem lässt sich die Sprache auf Windows-Systemen und auf verschiedenen Linuxsystemen anwenden und ausführen. 

Es wird keine zusätzliche Software benötigt und der Programmierer hat die volle Kontrolle über das System. Dies bedeutet, er kann Ports ansprechen und auch APIs (Schnittstellen) problemlos nutzen. Der größte Vorteil dieser maschinennahen Sprache ist jedoch, dass sie sehr schnell und effizient arbeitet. Da hier keine VM zum Einsatz kommt, können die Befehle deutlich schneller ausgeführt werden.

Leider gibt es auch hier wieder einige Nachteile. Zum einen ist die Syntax der Sprache recht kompliziert und recht veraltet. Zudem muss hier die Speicherbelegung manuell erfolgen. Das kann besonders für Anfänger zu Beginn recht komplex sein, weswegen viele Nutzer recht schnell die Lust am Programmieren in dieser Technologie verlieren können. 

Auch die Plattformunabhängigkeit ist nicht ganz so groß wie bei anderen Sprachen. Da hier keine VM zum Einsatz kommt, können die Anwendungen nur auf Systemen ausgeführt werden, auf denen sie auch geschrieben wurden. Die Sprache funktioniert bisher auch nur auf Windows und Linux.

Wofür eignet sich die Programmiersprache?

Fast alle C-Sprachen werden aufgrund ihrer maschinennahen Eigenschaften für sogenannte Embedded-Systems verwendet. Dies bedeutet alles, was mit Elektronik zu tun hat, wie beispielsweise Kühlschränke, Waschmaschinen oder bei Geräten in der Medizintechnik. 

Weiterhin findet die Sprache auch Anwendung in unterschiedlichen Desktopanwendungen oder in der Spieleprogrammierung. Oftmals werden viele Spielmechaniken beispielsweise in C++ geschrieben. Prinzipiell lässt sich sagen, alle Anwendungen, welche sehr stark auf die Hardware bezogen sind, lassen sich gut mit dieser Sprache realisieren.

Die Unterschiede zwischen beiden Sprachen

Da nun beide Sprachen vorgestellt wurden, gilt es herauszufinden, wo die Unterschiede liegen. Prinzipiell sind beide Sprachen objektorientiert, doch da hören die Gemeinsamkeiten bereits wieder auf. Denn während Java aufgrund seiner VM auf nahezu jeder Plattform problemlos läuft, gibt es bei C++ einige Einschränkungen dahingehend. 

Denn hier kann nur Linux und Windows genutzt werden.

Weiterhin sind Anwendungen, welche auf einer der beiden Plattform geschrieben sind, auch nur auf diesen wieder ausführbar. Was Plattformunabhängigkeit betrifft, hat Java aufgrund seiner VM also deutlich die Nase vorne. 

Jedoch ist der Einsatz dieser VM auch gleichzeitig ein großer Nachteil, welcher das Ausführen von Befehlen deutlich ausbremst. Hier geht der Punkt klar an C++, da die maschinennahe Sprache deutlich effizienter und schneller arbeitet.

Im Hinblick auf die Komplexität ergeben sich ebenfalls weitere Differenzen zwischen beiden Sprachen. Während Java deutlich anfängerfreundlicher und leichter ist und die Speicherverteilung hier vollständig automatisiert erfolgt, ist das bei C-Sprachen ganz anders aus. 

Hier müssen die Speicher vom Programmierer festgelegt werden und auch die Syntax ist relativ unübersichtlich und veraltet. Prinzipiell sind alle C-Sprachen deutlich komplexer und für den Einstieg in die Welt des Programmierens eher ungeeignet. Java hingegen stellt hier eine deutlich anfängerfreundliche und überschaubare Umgebung für Einsteiger des Programmierens dar.

Der letzte Unterschied bei beiden Sprachen liegt schlussendlich in der Anwendung. Während C-Sprachen relativ maschinennah sind und eher in Embedded-Systems oder in der Spieleentwicklung Einsatz finden, ist Java für solche Anwendungen eher ungeeignet.

Was sind Ihre Erfahrungen?           

Interessante Links:

Ein Vergleich von Java und C++
Welche der beiden Programmiersprachen ist schneller?

Bilder: Freepik


Der Autor: Sascha Thattil arbeitet bei YUHIRO und hilft Unternehmern und Unternehmen beim einfachen Aufbau von Programmier-Teams in Indien. YUHIRO ist ein deutsch-indisches Unternehmen welches IT Firmen, Agenturen und IT Abteilungen Softwareentwickler bereitstellt.

1 Kommentar
  1. Weder Java noch C++ sind anfängerfreundlich. Java ist ein Biest, was so tut als wäre es anfängerfreundlich, bis man dann glaubt, was zu können und in dem Glauben Profi zu sein dann unwartbaren Mist programmiert.

    C++ zu lernen ist unglaublich frustrierend – aber man lernt, wenn man nicht aufgibt. Ich komme von Assembler und C. Für mich vereinfachte C++ unglaublich viel. Ich wusste aber auch, was ich vom Computer will.
    Viele geben das Programmieren auf, weil sie gar nicht verstehen, wie Computer funktionieren und was man damit machen kann. Das ist wie BWL studieren, obwohl man sich mit Zahlen nicht beschäftigen mag.

    Java ist als Lern-Plattform extrem ungeeignet, weil es ein virtuelles Verständnis vom Programmieren auf einer virtuellen Plattform vermittelt und den Leuten schlechtes Programmieren als State-of-the-Art präsentiert. Gute Java-Programmierung ist so mieserabel, dass man sie in professioneller C++-Programmierung als bewusste Sabotage aufgefasst werden muss. Das ist unterhalb von C++-Anfängerniveau, das ist absolut falsch. Java ist die Art von schlechter Programmierung, die C++-Entwicklung unterstellt wird. So beschissen programmiert aber kein C++-Anfänger wenn er wenigstens in einem semi-professionellen Umfeld arbeitet oder einen C++-Kurs aus diesem Jahrtausend liest.
    Aber mehr geht in Java halt nicht. Das ist aber halt nicht die Denke, die man sich als Anfänger aneignen sollte.

    Der Autor fasst „C-Sprachen“ zusammen, unterstellt C# die Notwendigkeit die Speicherverwaltung selbst zu übernehmen. C# benutzt wie Java eine GarbageCollection.
    C++ nutzt vorrangig RAII, hier wird kein Müll gesammelt, aber um die Speicherverwaltung muss man sich auch nicht kümmern, wenn man nicht will. Man kann es aber.

    Da ist die Aussage, dass C++ [nur?] auf Windows und Linux genutzt werden kann. Zu implizieren, dass Mac nicht möglich wäre ist Unsinn. C++ läuft auf so ziemlich allem, was irgendwie computerähnlich ist. Ich habe es auf dem Commodore Amiga gelernt und ich glaube, da gibt es bis heute aktuelle (!) Compiler für. Das letzte Amigamodell kam 1992(?) raus.
    Der Begriff Plattformunabhängigkeit wird abstrus genutzt, denn Java ist auf Java-Plattformen nutzbar, die als VM auf Linux, Mac, Windows und Solaris verfügbar ist. Auf Arduino nicht. C++ ist auf mehr Plattformen verfügbar als die Java-Plattform.
    Es ergibt keinen Sinn eine Anwendung auf einer anderen Plattform zu verwenden, als die, für die sie geschrieben wurde. Das funktioniert nicht.
    Eine CAD-Software läuft aber nicht auf einem Embedded-System. Das liegt weniger daran, dass die Sprache nicht plattformunabhängig wäre, sondern dass ein Embedded-System keine Maus/Tastatur oder Bildschirm hat. Diese Plattform ist ganz einfach kein PC.

    Ein Java-Programm für Dalvik kompiliert nicht auf einer JavaVM und auch nicht umgekehrt. Ein C++-Program für Qt lässt sich auf Mac, Linux und Windows kompilieren.
    Hier unterscheiden sich C++ und Java nicht. Wie man Java gegen das Java-Framework kompiliert, kann C++ gegen beliebige C++-Frameworks kompiliert werden und ist damit genauso portabel wie die gewählten Frameworks.

    Und weil das so ist, ergibt es auch keinen Sinn ein Programm für jeden Start neu zu kompilieren. Es ist einfach kein sinnvolles Szenario ein Programm auf eine Festplatte zu schreiben und dann stolz zu verkünden, dass man die Festplatte an Linux und Windows anschließen kann und das Programm starten kann. Wenn das tatsächlich ein benötigtes Szenario ist, dann kann ich das Programm auch für beide Plattformen vorkompiliert draufpacken. Aber hat irgendwer ernsthaft das Problem, dass er eine Software auf unterschiedlichen Betriebsystemen braucht, so dass er sich dafür eine Java-Plattform auf alle Systeme installiert? Warum installiert er sich nicht einfach das Programm auf alle Systeme und lässt dann JavaVM weg? Die Software wäre dann auch noch schneller, man könnte also billigere Computer einsetzen, die dann die gleiche Leistung bringen.

    Das Gravierende ist, dass Sun eine milliardenschwere Werbe-Campagne für Java gestartet hat, weil das Projekt eine komplette Fehlplanung darstellt. Und all die Nachteile, die Sun da zu Vorteilen umdichtete, werden seitdem kritiklos nachgeplappert, auch dann, wenn es vollkommener Unsinn ist, sowas wie Java hat keine bösen, fehleranfälligen und „schwerverständlichen“ Pointer. Java hat ausschließlich Pointer – mit allen Konsequenzen.

    Die VM ist ja auch nicht entstanden, weil das irgendwie eine gute Idee wäre, sondern weil die Java-CPUs nicht kamen und man das Ding ansonsten komplett in die Tonne hätte werfen können. Sun stellte eigentlich Computer mit eigenen nicht Intel-kompatiblen CPUs her. Es wollte aber keiner Java haben, solange das nicht auf Intel-CPUs lief. Und es läuft nicht auf Intel, weil es toll ist, sondern damit man dann Java-CPUs kaufen sollte, die dann schneller wären. Ich habe Java in den 90ern gelernt, ohne JIT-Compiler. Java war so katastrophal langsam, da war ein C64 schneller. Dass konnte man nicht im Entferntesten ernst nehmen.

    C++ ist eine gewachsene Sprache und da ist wirklich nicht alles schön. Im Gegenteil. Aber Java ist eine geplante Sprache und hat sich aus C++ vorrangig das rausgepickt, was anständige C++-Entwickler vermeiden. Das schöne an C++ ist: Man kann es vermeiden, man kann gut programmieren. Man kann auch große Scheiße mit fragiler Softwarearchitektur bauen, aber in Java muss man das. Das ist ein Unterschied.

    Abschließend muss man sagen: Die Idee für Java ist, dass Ausbildung billiger wird, also geringere Gehälter bezahlt werden müssen und damit Software billiger wird. Das überzeugte Entscheider.

    Das ist alles in die Hose gegangen. Software ist teurer geworden, weil die Probleme sind die gleichen wie zuvor. Man kann sie in Java nur nicht mehr gut lösen.

    Als C++-Entwickler ohne nennenswerte Java-Erfahrung arbeitete ich in einem Java-Unternehmen, weil die ausgebildeten Java-Entwickler ihre Bugs nicht mehr verstanden. Der Java-Anfänger(!) debuggt den Code derer, die das gelernt haben. „Weil C++-Entwickler wissen, was sie tun“, wie ein Projektleiter zu mir meinte.
    Wenn man C++-Kurse an Java-Programmierer gibt und hört „Ich verstehe jetzt, was ich letztes Jahr programmiert habe“ dann ist das nicht gut.
    Nicht zu wissen, was man tut, kann nicht das Ziel einer Sprache sein, die man zum Lernen auswählt.

    C++ ist frustrierend, fangt mit C an: Das ist auch frustrierend, schafft aber erstmal eine Übersicht. Modern C++ ist anders. Aber wenn das jeder Depp spontan mit einem Udemy-Kurs Profi wäre, gäbe es auch keinen Grund mehr als Mindestlohn zu zahlen.

Schreibe einen Kommentar zu Sascha Atrops Antworten abbrechen