先从C开始说起,它通常在底层,写一写驱动逻辑等等的代码。所谓嵌入式,一般都是C的,学好C,必然离不开数据结构,很多初学者认为C和数据结构是一码事。其实数据结构更多的是一种思想和算法。里面的数据结构,列表,堆栈,树,其实在其他语言也都有使用,只是被封装好了而已。个人总结下C的优点:很清晰,逻辑性相对来说非常强的,更好的与硬件设备打交道(当然C++有时也可以)是因为有指针。缺点,学习难度比较大。

这里有个误区,我觉得我有必要阐述一下,很多人一听到C就是面向过程得,一听到C++,java就是面向对象的。其实这是一个误区,面向过程亦或者说是面向对象完全是我们程序员的思想,语言本身只是一种工具,C也可以面向对象,同样java也会被不好的程序员来面向过程。

C和C++:

C和C++区别其实蛮大的,首先C++可以很容易的面向对象,C可以面向对象,但非常复杂。主要是因为有了类。所以在应用场合会有比较大的不一样。由于C++的特性,所以它既能进行高效的业务处理,也能有比较好的界面表现。例如我们常用VC++去开发一些windows应用,用qt写linux的应用,C就相对吃力很多了。

C++本来说是对C的继承和加强,它有C的指针,运行高效,同时又能方便的面向对象。但是正是由于C++的这些特性,使得C++成为了一个介于C和java之间的一个“不伦不类”的产品(个人看法)。

再看C++和java吧:

1:大家都知道,java是跑在虚拟机上的,所以具备了比较好的平台移植性,很多C++的朋友要不爽了,C++也是有很好的移植性的。好吧,这个很难界定,但是,我们使用C++去写代码的时候难免会使用到一些操作系统的api,这时候就会出问题了,例如在linux下开启线程和windows下是不一样的,文件操作,等等等等,如果你都使用的自带的库文件,那的确移植没有问题。综上,我们还是可以看出java相对C++比较优秀的可移植性的。

然后,正是由于java使用了虚拟机,所以导致了它的效率远远的低于了C++。

2:C++保留了指针。我们都知道,C++是可以直接去使用指针的,说实话指针这玩意儿真是一个叫人又爱又恨的玩意儿,它用的好,效率大大的提高。用的不好,会导致系统的崩溃。而java的虚拟机为我们把这些东西都封装好了,所以我们在使用java的时候虽然会报一些空指针异常,但是确实让程序健壮了不少。

3:c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。

4:Java是完全面向对象的语言,所有函数和变量都必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。

5:内存管理。我们在c++中可以直接手动的释放内存,但是java做不到,它的垃圾是有虚拟机去回收的,不需要程序员去操作。

6.操作符重载。 Java不支持操作符重载。操作符重载被认为是c++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。

7.预处理功能。 Java不支持预处理功能。c/c++在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c++预处理器的功能类似。
8. Java不支持缺省函数参数,而c++支持。 在c中,代码组织在函数中,函数可以访问程序的全局变量。c++增加了类,提供了类算法,该算法是与类相连的函数,c++类方法与Java类方法十分相似,然而,由于c++仍然支持c,所以不能阻止c++开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
Java没有函数,作为一个比c++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
9. 字符串。 c和c++不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)Java字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用“十”进行连接操作。
10. “goto语句。
“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
l1.类型转换
在c和c++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

转载于:https://blog.51cto.com/flyingsnail/1280828

java和C++ C比较相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

  10. 科学处理java.lang.StackOverflowError: null异常

    java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...

最新文章

  1. python tcp server_python scoket 编程 | tcp server client - 简明教程
  2. centos 防火墙位置
  3. python实现矢量分级渲染_用 Python 撸一个 Web 服务器-第4章:动态渲染数据
  4. 【脚本整理】docker-compose 部署prometheus + grafana
  5. osm2mysql_安装部署MySQL主从复制
  6. 游戏cg提取工具_记蒼の彼方のフォーリズム の CG提取
  7. redis和mecache和ehcache的特点
  8. html css周志,【嘉兴东臣php】HTML+CSS+JS周总结
  9. 【编译工具】之gcc中-march与-arch的使用
  10. 适配iOS10以及Xcode8
  11. WCF+AJAX最佳实践
  12. 张宇1000题高等数学 第八章 一元函数积分学的概念与性质
  13. win2008 时间同步命令
  14. 网易云音乐自动获取前三首歌曲名称
  15. 【原创】SSD硬盘PC安装WIN7和WIN10双系统全过程
  16. Oracle EBS MTL_SUPPLY作用
  17. 后端接收Get请求与Post请求 参数示例
  18. MDI窗体(多文档界面)
  19. OpenStack和Open Source MANO:NFV部署两大支柱
  20. Verilog时序逻辑硬件建模设计(四)移位寄存器

热门文章

  1. 苏州大学计算机科学与技术研究生分数线,【图片】18年苏州大学计算机872考研经验分享【苏州大学研究生吧】_百度贴吧...
  2. android 组件导出安全,App安全检测实践基础:组件安全(二)
  3. 实战:RocketMQ削峰,这一篇就够了
  4. RocketMq 的最佳实践
  5. ubuntu利用apt-get卸载软件
  6. iOS Core Data
  7. hp服务器维护开关,HP服务器开机无显维修案例
  8. php cookie使用实例h5,html5实现数据存储实例代码
  9. k8s多master建议用几个_Kubernetes 教程之跟着官方文档从零搭建 K8S
  10. 公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档