Programming Tutorials

What Java Has Removed from C++

By: Tamil Selvan in Java Tutorials on 2007-09-15  

There are a number of C++ features that Java does not support. In some cases, a specific C++ feature simply didn't relate to the Java environment. In other cases, the designers of Java eliminated some of the duplication of features that exists in C++. In still other instances, a feature of C++ is not supported by Java because it was deemed too dangerous for Internet applets.

Perhaps the single biggest difference between Java and C++ is that Java does not support pointers. As a C++ programmer you know that the pointer is one of C++'s most powerful and important language features. It is also one of its most dangerous when used improperly. Pointers don't exist in Java for two reasons:

  • Pointers are inherently insecure. For example, using a C++-style pointer, it is possible
    to gain access to memory addresses outside a program's code and data. A malicious
    program could make use of this fact to damage the system, perform unauthorized
    accesses (such as obtaining passwords), or otherwise violate security restrictions.
  • Even if pointers could be restricted to the confines of the Java run-time system (which
    is theoretically possible, since Java programs are interpreted), the designers of Java
    believed that they were inherently troublesome.

    Since pointers don't exist in Java, neither does the -> operator.

Here are a few more of the most important "omissions":

  • Java does not include structures or unions. These were felt to be redundant since the
    class encompasses them.
  • Java does not support operator overloading. Operator overloading is sometimes a
    source of ambiguity in a C++ program, and the Java design team felt that it causes
    more trouble than benefit.
  • Java does not include a preprocessor nor does it support the preprocessor directives.
    The preprocessor plays a less important role in C++ than it does in C. The designers
    of Java felt that it was time to eliminate it entirely.
  • Java does not perform any automatic type conversions that result in a loss of
    precision. For example, a conversion from long integer to integer must be explicitly
  • All the code in a Java program is encapsulated within one or more classes. Therefore,
    Java does not have what you normally think of as global variables or global functions.
  • Java does not allow default arguments. In C++, you may specify a value that a
    parameter will have when there is no argument corresponding to that parameter when
    the function is invoked. This is not allowed in Java.
  • Java does not support the inheritance of multiple superclasses by a subclass.
  • Although Java supports constructors, it does not have destructors. It does, however,
    add the finalize() function.
  • Java does not support typedef.
  • It is not possible to declare unsigned integers in Java.
  • Java does not allow the goto.
  • Java does not have the delete operator.
  • The << and >> in Java are not overloaded for I/O operations.
  • In Java, objects are passed by reference only. In C++, objects may be passed by
    value or by reference.

Add Comment

* Required information


No comments yet. Be the first!

Most Viewed Articles (in Java )

Latest Articles (in Java)