Comparison of Java with C++

Java C++ के OOP heart को रखता है पर pointers, destructors, multiple inheritance और operator overloading हटा देता है, safety के लिए raw control trade करते हुए: exam की favourite comparison table।

9 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

Semester 3 से एक Transfer Student

पिछले semester आपने C++ में CanteenTill बनाया: classes, constructors, delete, एक-दो friend functions। अब एक Java file खोलिए और 90% familiar लगता है: braces, semicolons, if, for, यहाँ तक कि class भी।

Exam बाकी 10% में रहता है। "Java को C++ से Compare कीजिए" सबसे ज़्यादा repeated BCA403 questions में से एक है, और good news यह है कि लगभग हर difference एक design decision follow करता है जो Java ने बनाया।

Theory

वह Locked Drawer

C++ एक workshop है जहाँ हर tool open bench पर है, वे भी जो आपको काट सकते हैं: raw pointers, manual delete, operator overloading।

Java एक safety audit के बाद वही workshop है: dangerous drawer locked है। आप कुछ low-level control खोते हैं; बदले में, crashes की पूरी categories (dangling pointers, memory leaks, double frees) बस हो ही नहीं सकतीं। Comparison table की हर row यही एक trade है: safety के लिए control।

At a glance

Java बनाम C++ (यह table सीखिए, यही answer है)

FeatureC++Java
CompilationNative machine code मेंBytecode में, JVM से run होता है
PointersYes, पूरा pointer arithmeticकोई pointers नहीं; सिर्फ़ references
Memory freeingManual, delete के साथ (destructors)Automatic garbage collection
Multiple inheritanceClasses के लिए allowedClasses के लिए नहीं; interfaces के ज़रिए
Operator overloadingYesNo (Strings के लिए सिर्फ़ built-in +)
Preprocessor#include, #defineकोई नहीं; import इस्तेमाल करता है
Global variables/functionsAllowedNo; सब कुछ एक class के अंदर
gotoAvailableReserved word, कभी usable नहीं

Theory

Java ने Sharp Tools क्यों छोड़े

Pointers C++ code को किसी भी memory address को पढ़ने या लिखने देते हैं; एक ग़लत address data corrupt कर देता है या program crash कर देता है। Java के references objects की तरफ़ point करते हैं पर raw memory पर add, subtract या aim नहीं किए जा सकते।

Destructors और delete programmer को memory free करने के लिए responsible बनाते थे; एक बार भूलिए और आप leak करते हैं। Java का garbage collector उन objects के लिए watch करता है जिनकी तरफ़ अब कुछ भी refer नहीं करता और उन्हें automatically reclaim करता है। Safer, memory कब वापस आती है इस पर exact control की कीमत पर।

Quiz

इनमें से कौन सी feature Java में available NAHI है?

  1. Classes का multiple inheritance
  2. Garbage collection
  3. Interfaces
  4. Classes के बीच single inheritance
Show the answer

Classes का multiple inheritance

Java एक class को 2 parent classes extend करने से forbid करता है (C++ का diamond problem एक motivation था)। Garbage collection Java की headline features में से एक है, interfaces multiple inheritance का Java का replacement route हैं (Unit 2), और extends के साथ single inheritance everyday Java है। अगर इस तरह के question में एक option interfaces या garbage collection को missing की तरह mention करता है, यह एक trap है।

Think first

delete कहाँ गया?

CanteenTill में आपने इस्तेमाल के बाद delete के साथ एक Bill object free किया। Tap करने से पहले: Java में equivalent step क्या है?

Show the answer

कोई equivalent step नहीं है, और यही answer है जो examiner चाहता है। जब अब किसी object की तरफ़ कोई reference नहीं point करता, garbage collector इसे automatically reclaim करता है; आप कभी delete call नहीं करते और Java के पास destructors नहीं हैं। ज़्यादा से ज़्यादा आप एक reference drop कर सकते हैं (bill = null) object को sooner eligible बनाने के लिए। Manual memory freeing exactly वह C++ responsibility है जो Java ने हटा दी।

Watch out

इस Comparison में दो Traps

Trap 1: "Java multiple inheritance नहीं कर सकता" लिखना। Incomplete। कहिए: classes के साथ नहीं, पर एक class कई interfaces implement कर सकता है, जो same idea तक Java का route है।

Trap 2: "Java में pointers नहीं हैं, तो objects हर जगह copy होते हैं" लिखना। Class types के Java variables objects की तरफ़ references hold करते हैं। Java जो हटाता है वह pointer arithmetic और raw memory access है, किसी object को refer करने का concept नहीं।

Theory

पूरे Subject में इस Thread को Carry कीजिए

पूरे semester CanteenTill को एक हाथ में और BookBridge को दूसरे में रखिए। Constructors (Unit 2) दोनों languages में similarly behave करते हैं; this C++ के this pointer syntax को replace करता है; extends colon को replace करता है; interfaces (Unit 2) multiple inheritance answer करते हैं; garbage collection delete को replace करता है। जब भी एक Java feature odd लगे, पूछिए: यह किस C++ problem को fix करने के लिए design किया गया था? Answer आमतौर पर आपके लिए exam paragraph लिख देता है।

Summary

Key takeaways

  • Java और C++ C-family syntax और OOP share करते हैं; differences deliberate safety choices हैं।
  • Java में कोई pointers नहीं, कोई destructors/delete नहीं, कोई operator overloading नहीं, कोई preprocessor नहीं, कोई globals नहीं।
  • Memory garbage collector reclaim करता है, programmer नहीं।
  • Classes का multiple inheritance forbidden है; interfaces Java route provide करते हैं।
  • C++ native machine code में compile होता है; Java JVM के लिए bytecode में compile होता है।
  • goto और const Java में reserved words की तरह exist करते हैं पर कभी इस्तेमाल नहीं हो सकते।
  • Memory hook: Java dangerous drawer locked वाला C++ है।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Introduction to Java

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Comparison of Java with C++ · Java Programming Language · Gri-Learn