首先应该清楚,Java 是由 C++发展而来的,保留了 C++的大部分内容,其编程方式类似于 C++。但 Java 的句法更清晰、规模更小、更易学。Sun 公司曾对多种程序设计语言进行分析研究,取其精华去其糟粕,最终推出了 Java。Java从根本上解决了C++的固有缺陷,形成了新一代面向对象的程序设计语言。

Java 和 C/C++的相似之处多于不同之处,有 C 基础的读者,学习 Java 会更容易。相较而言,Java 的编程环境更为简单。在此,给大家列举以下Java与C/C++之间的区别之处。

一、指针

Java 没有指针的概念。在 C/C++中,指针操作内存时,经常会出现错误。而在Java中是没有指针这一概念的,因此也有效地防止了一系列由指针引起的操作层失误(如指针悬空所造成的系统崩溃),更有利于 Java 程序的安全。

二、多重继承

Java不支持多重继承。多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以 Java 不支持多重继承,但允许一个类实现多个接口。可见,Java 既保留了 C++多重继承的功能,又避免了 C++的许多缺陷。

三、数据类型

Java 是完全面向对象的语言,所有方法和数据都必须是类的一部分。除了基本数据类型之外,其余类型的数据都作为对象型数据。例如,对象型数据包括字符串和数组。类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而 C++将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外,Java 还取消了 C/C++中的结构和联合,使编译程序更加简洁。

四、自动内存管理

Java 自动进行无用内存回收操作,不再需要程序员进行手动删除。Java 程序中所有的对象都是用 new 操作符建立在堆栈上的,这个操作符类似于 C++的“new”操作符。当 Java 中一个对象不再被用到时,无须使用内存回收器,只需要给它添加删除标签,无用内存的回收器便利用空闲时间在后台运行。而 C++中必须由程序释放内存资源,这就增加了程序员的负担。

五、操作符重载

Java 不支持操作符重载,操作符重载被认为是 C++的突出特征。操作符重载,就是把操作符(比如'+,-,*,/'这些运算符)赋于新的意义, 来完成更为细致具体的运算等功能。要实现操作符重载,就要使用操作符重载函数,而运用函数就肯定会存在各种限制条件以及特殊情况。特殊情况就需特殊处理,因此操作符重载还是比较繁琐的。

而根据上述二、三两点,我们可以了解到Java语言是走“简洁风”的,因此为了保持Java语言的简洁性,便毅然抛弃了操作符重载这一功能,但是为了避免舍本逐末的情况,Java语言还是可以通过类来实现操作符重载所具有的功能的。

六、预处理功能

C/C++在编译过程中都有一个预编译阶段,即预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java 允许预处理,但不支持预处理器功能,因为 Java 没有预处理器,所以为了实现预处理,它提供了引入语句(import),但它与 C++预处理器的功能类似。

七、缺省参数函数

Java 不支持缺省参数函数,而 C++支持 。在 C 语言中,代码组织在函数中,函数可以访问程序的全局变量。后来C++增加了类,提供了类算法,该算法是与类相连的函数,C++类方法与 Java 类方法十分相似。由于 C++仍然支持 C语言,所以 C++程序中仍然可以使用 C 的函数,结果导致函数和方法混合使用,使得 C++程序混乱,而Java 没有函数。作为一个比 C++更纯的面向对象的语言,Java 强迫开发人员把所有例行程序包括在类中。事实上,用方法实现例行程序可激励开发人员更好地组织编码。

八、字符串

C 和 C++不支持字符串变量,在 C 和 C++程序中使用“Null”终止符代表字符串的结束。在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,在整个系统中建立字符串和访问字符串元素的方法是一致的。Java 字符串类是作为 Java 语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用“+”进行连接操作。

九、goto 语句

“可怕”的 goto 语句是 C 和 C++的“遗物”,它是该语言技术上的合法部分。goto语句也称为无条件转移语句,通常与条件语句配合使用,用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使程序的可读性变差,增加程序调试的难度。 Java 不提供 goto 语句,虽然Java指定 goto 作为关键字,但不支持它的使用,这使程序更简洁易读。

十、类型转换

在 C 和 C++中,有时会出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在 C++中可将一个浮点值赋予整型变量,并去掉其尾数。Java 不支持 C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

c++ 形参用指针 还是对象_Java 和 C/C++两大高手的对比相关推荐

  1. java数据类型 两大类_JAVA的数据类型分为两大类型

    JAVA的数据类型分为两大类型 public class Demo04 { public static void main(String[] args) { //八大基本数据类型 //整数 int n ...

  2. c++ 形参用指针 还是对象_C语言:聚会上,我发现只有我没有对象!

    再一次程序员聚会上,C语言遇到了不少小伙伴:Java , Python, JavaScript,Ruby...... "指针?你说的是那容易出错的指针吗?现在有谁用指针啊?"  J ...

  3. 函数的形参(普通形参、指针形参、引用形参)

    以一些代码段为例: 1.普通形参 int n=10; add1(n);void add1(int v1) { v1+=1;//对实参无影响 } 这是最普通的形参方式,形参仅仅为实参的一个副本,对形参的 ...

  4. 2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

    2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1.指针形参2.引用形参3.二级指针形参4.指针引用形参) 1.指针引用 #inc ...

  5. c++学习笔记之指向对象的指针以及对象数组

    用对象数组的方法对数据成员进行初始化. #include<iostream> using namespace std; class box {public:box(int h=10,int ...

  6. java数组有跨类建立对象_Java性能优化的45个细节(珍藏版)

    点击上面 蓝色字体关注我们技术 / 架构 / 职场 / 面试 关注即送:4000G  架构师视频 来源:http://t.cn/EiP42VF 在JAVA程序中,性能问题的大部分原因并不在于JAVA语 ...

  7. 函数形参为指针和指针引用的区别

    当函数的形参为指针时: 形参只是获得了实参的地址值,当你改变形参的指向时,实参的指向并不改变. 当函数的形参为指针引用时: 形参不仅仅获得了实参的地址值,还和实参地址绑定,改变形参的指向就能改变实参的 ...

  8. java怎么判断类相同_java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用“===”是什么意思...

    导航:网站首页 > java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用"==="是什么意思 java中如何判定两个对象属于同一类 两个对象是不是类的相同实 ...

  9. 实例化Java对象_Java面向对象基础之对象实例化

    1.实例化对象的过程可以分为两部分,例如下面代码: Person per = new Person(); 该代码分为两部分: 第一,声明对象:Person per,这部分是在栈内存中声明的,与数组一样 ...

最新文章

  1. 2020-09-20C++学习笔记之与C语言对比1
  2. python语句x 3 3执行_Python语言中,x=2,y=3,执行x,y=y,x之后,x和y的值分别是什么?...
  3. go mysql教学_Go语言之对Mysql简单操作
  4. EE JSP:使用自定义标签库生成动态内容
  5. 鸿蒙与安卓系统简单对比,绝非追求三分天下。
  6. c语言程序设计歌手大奖赛,《C语言及程序设计》实践参考——歌手大奖赛计分函数版...
  7. 2018-2019-1 20189218《Linux内核原理与分析》第二周作业
  8. java微信h5支付_java 微信H5支付
  9. 微型计算机控制第三版,清华大学出版社-图书详情-《微型计算机控制技术(第3版)》...
  10. win10安装solidworks 注册机闪退的问题,转自知乎
  11. 阿里云主机泄露Access Key到getshell
  12. antd-vue表格内部换行
  13. docker的搭建和简单应用
  14. Dubbo源码解析-——服务引用
  15. ggplot2: post-hoc + 森林图
  16. PHP各大音乐平台API接口下载,PHP各大音乐平台API接口
  17. FME爬取高德POI数据
  18. 全套Python零基础学习资料,电子书整理好了,想要进行技术提升,转行的自取!
  19. php导出cvs文件英文自动分割,导出csv_php导出csv文件函数
  20. 微信机器人上线自动回复,OSSChat 助力开源社区运营 | Chatopera

热门文章

  1. matlab 交换矩阵的行和列
  2. 机器学习基础(五十六)—— tanh、sign 与 softsign
  3. Python基础——timeit模块
  4. sympy —— Python 符号运算
  5. redhat5.4 安装mysql_RedHat5.4搭建LAMP
  6. 想学python买什么书好-看了许多python书后!我发现学好python这三本书必看
  7. python爬虫教程-Python教父|廖雪峰老师官方爬虫教程,13个案例带你全面入门!
  8. python语言能做什么-python语言能做什么
  9. 简单python脚本实例-简单了解python调用其他脚本方法实例
  10. python工资这么高为什么不学-Python为什么这么火 Python岗位薪资水平如何