C++과 JAVA는 문법적으로 상당히 유사하다.
두 언어 모두 클래스 기반의 객체 지향 프로그래밍 언어이기 때문이다.
즉, 클래스 단위로 사용자 요구를 처리하는 속성(변수)과 메소드(함수)를 묶어
클래스의 인스턴스를 생성하여 처리하는 방식으로 전개해 나간다.
이처럼 유사한 이유는 java가 설계될 때 C++ 개발자들이 쉽게 배울 수 있도록 만들었기 때문이다.
하지만 여러 차이점이 존재하는데, 이는 설계 목표의 차이에서 발생했다.
JAVA는 보안, 이식성, 빠른 개발에 비중을 두었고,
C++은 속도와 C언어와의 하위 호환성에 중점을 두었다.
또한,
JAVA는 가상 머신 바이트 코드로 컴파일하며, 실행시키려면 가상 머신이 필요하지만,
C++은 각 머신에 맞는 기계어로 컴파일한다.
이러한 이유로 이론상 C++이 빠르긴 하지만
JAVA가 이식성, 보안 측면에서 나은 편이다.
C++은 C를 그대로 포함하며 하위 호환성을 유지하기 위해
프로그래머에게 메모리 관리 제어, 포인터, 전처리기 같은 기능을 컨트롤 하게 한다.
하지만 JAVA는 그 외에도 여러 버그를 일으키기 쉬운 기능들을 없애버렸다.
특히 메모리를 비우는 방법도 프로그래머가 직접 비우지 않고 '가비지 컬렉션'을 통해 비울 수 있도록 하였다.
또한, C++의 연산자 오버로드나 다중 상속 기능은 사용할 수 없다.
(다중 상속 대신 인터페이스로 다중 상속과 유사한 기능을 제공한다.)
이 때문에 빠른 개발이 필요하고, 성능보다는 이식성과 보안이 더 우선시 되는 경우 JAVA를 더 선호한다.