本文仅从片面的角度比较Java与C++的一些特性,如有错误的地方,请指正。

语言特性上的一些差异:

1、Java没有无符号整数,C++/C#都有。

2、Java中不存在指针。Java的引用是功能弱化的指针,只能做“调用所指对象的方法”的操作,C#默认不使用指针,在unsafe标识时可以使用。

3、Java不能用双等号比较字符串(注意常量池中的字符串),C++/C#可以。

4、Java强制局部变量初始化。

5、Java不支持自动类型转换,必须强制类型转换。

6、Java和C#没有宏。

7、C++经过编译连接后生成二进制代码,C#生成MSIL,Java生成字节码。

8、Java和C#有垃圾回收机制(GC),C++需要手动释放资源,可能会因失误忘记释放资源而造成内存泄漏等问题(C++11提供智能指针来解决这一问题)。

类机制上的一些差异:

1、 Java是完全面向对象的,所有方法都必须写在类中,C++既可以面向过程也可以面向对象,函数不必须写在类中。为了避免命名重复与实现代码重用性,C++和C#使用命名空间,Java使用包。

2、 Java中有强制性异常(除RuntimeException外,必须在编译前处理),而C++没有。(C++ C# 和Java的捕获异常语法大体相同)

3、 Java所有对象都直接或间接继承自Object,并且提供接口机制,C++没有共同的基类。

4、 Java在重写时默认为虚函数,而C++必须用virtual说明。

C++:

 class A
{
public:
void virtual FUN() //修改这里的virtual
{
cout<<"FUN in A is called"<<endl;
}
}; class B : public A
{
public:
void FUN()
{
cout<<"FUN in B is called"<<endl;
}
};
int main()
{
A a;
B b;
A *p;
p = &a;
p->FUN();
p = &b;
b.FUN();
return ;
}
/*
有virtual时结果
FUN in A is called
FUN in B is called
*/
/*
删去virtual时结果
FUN in A is called
FUN in A is called
*/

Java:

 class A{
public void FUN(){
System.out.println("FUN in A is called");
}
}
class B extends A{
public void FUN(){
System.out.println("FUN in B is called");
}
}
public class VirtualTest {
public static void main(String args[]) {
A a = new A();
B b = new B();
A p;
p = a;
p.FUN();
p = b;
p.FUN();
}
}
/*
默认为virtual
FUN in A is called
FUN in B is called
*/

5、 Java因会与方法重载产生语义二义性而不支持默认参数。

6、 C++有运算符重载,和类型转换函数,而Java中没有。

7、Java 不支持多重继承,只能通过实现多个接口来达到相同目的,C++ 支持多重继承。

8、Java 不支持条件编译,C++ 通过 #ifdef #ifndef 等预处理命令从而实现条件编译。

Java与C++比较的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  10. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

随机推荐

  1. Unity脚本默认事件执行顺序

    1. Awake Awake用于脚本唤醒.此方法为系统执行的第一个方法,用于脚本的初始化,在脚本的生命周期中只执行一次. 2. Start Start方法在Awake之后执行,在脚本的生命周期中只执行 ...

  2. JDK 8 equals() & ==

    equals() 是 java.lang.Object 的一个实例方法,被所有的子类所继承(可被复写). 以下是 JDK 8 中 java.lang.Object.equals() 源码: publi ...

  3. HDU 2544 最短路(邻接表+优先队列+dijstra优化模版)

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. L2-022. 重排链表

    L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...

  5. centos7下搭建ceph luminous(12.2.1)--无网或网络较差

    本博客的主要内容是在centos7下搭建luminous,配置dashboard,搭建客户端使用rbd,源码安装ceph,最后给出一些较为常用的命令.本博客针对初次接触ceph的人群. 搭建环境: 主 ...

  6. 环境搭建:Vue环境搭建和项目初始化(windows)

    1.    安装node.js 官网下载安装:https://nodejs.org/en/ 版本查看:node -v 注意:node版本最好新一点好,推荐6.0以上. 2.    npm安装webpa ...

  7. nfs cron shell 作业

    作业一: nginx反向代理三台web服务器,实现负载均衡 所有的web服务共享一台nfs的存储 2台服务器 nginx [lb] :101.200.206.6 nginx [web]:101.200 ...

  8. Ubuntu16.04下同时安装Anaconda2与Anaconda3

    转自:http://blog.csdn.net/juezhanangle/article/details/78922888 由于编程时同时需要有python2/3的环境和大量的依赖包,本文的思路是先根 ...

  9. C语言学习笔记--字符串

    字符串是有序字符的集合,C 语言中没有字符串的概念,而是通过特殊的字符数组模拟字符串,是以'\0'结尾的字符数组. 1.字符数组与字符串 (1)在 C 语言中,字双引号引用的单个或多个字符是一种特殊的 ...

  10. 正确的停止java中的线程

    stop()方法不是一个正确的停止线程方法. 正确的停止方法:设置退出旗标