Java与C++的区别

Wesley13
• 阅读 476

C++和Java的区别:
(面试问到这个问题,特来总结一下 根据C++Prime和Think in Java两本书总结而来)
尽管Java是基于C++的的,但是相比之下,Java是一种更纯粹的面向对象程序设计语言。在Java中,一切都被视为对象。
1. C++创建对象之后,需要再使用完将其调用delete方法将其销毁;Java有垃圾回收机制,用来监视new出来的所有对象,辨别不会再被引用的对象,然后释放内存空间。
2. 作用域(C、C++、Java的作用域由花括号的位置决定):
但是以下代码在C和C++中是合法的,在Java中编译器会报告变量已定义。因为C和C++会将较大作用域的变量隐藏起来,但是Java不允许。

{
    int x = 12;
    {
        int x = 96;
    }
}

基本成员的默认值
当变量作为类的成员使用时,Java才确保给定默认值,以确保那些基本类型的成员变量得到初始化,但是C++没有此功能。而对于局部变量,C++编译器会对其予以警告,Java则会视为错误。
Java不可以将一个非布尔值当做布尔值在逻辑表达式中使用,C++却可以。
在C++中表达式的值为0则为假,非0则为真。
例如:

if(1){
}

移位操作符
Java中新增了一种“无符号”右移位操作符(>>>),它使用“零扩展”,无论正负,都在高位插入0。这是C、C++中所没有的。
C++引入了操作符重载机制,Java不支持,但是C#中可以实现自己的重载操作符。
Java允许我们把任何基本数据类型转换成别的基本数据类型,除了布尔类型外。
Java没有Sizeof()。在C\C++中,sizeof()操作符可以告诉我们为数据项分配的字节数,因为C++中不同的数据类型在不同的机器上可能有不同的大小。但是Java中所有数据类型在所有机器中大小都是相同的。(例如,C++的int在16位机器上为16位,在32及以上为32位,long在32位及以下为32位,在64位上为64位)
C++有goto,Java没有goto。
Java提供了一种类似的跳转机制:标签。用法 label:

label1:
outer-iteration{
        inner-iteration{
    break;(1)
    continue;(2)
    continue label1;(3)
break label1;(4)

}
}

(1)中,break中断内部迭代,回到外部迭代
 (2)中,continue使执行点移回到内部迭代的起始处。
 (3)中,continue label1同时终端内部迭代以及外部迭代,直接转到label1处;随后继续迭代,从外部迭代开始。
 (4)break label1 也会中断所有迭代,并回到label1处,但是不重新进入迭代。即完全终止两个迭代。
10. C++中析构函数是提供一个在对象删除前可以释放这个对象所占用的资源的机会,但是Java并未提供“析构函数”或者类似的概念。
在C++中,对象一定会被销毁(程序没有缺陷的情况下);
在Java里,对象却并非总是被垃圾回收。(垃圾回收并不等于“析构”)
11. 名称屏蔽如果Java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本。而C++若要在子类中引入一个新的重载方法,则需要屏蔽基类方法。

12. C++中有多继承,Java中只有单一继承。Java可以通过接口实现多继承。
13. Java是半解释和半编译的,运行速度比C++慢。
14. Java没有Struct或者Union
15. Java的泛型不允许使用基本数据类型。
16. 数组
 在c++中,数组定义时,已经分配存储空间,并可以使用。 (定义时指定数组大小)
 在java中,数组定义时,int arr[],只字义了数组变量,数组是不可以使用的。 只有数组new以后,才会创建数组,分配存储空间,并可以使用。 (定义时指定数组大小是非法的,创建时指定数组大小)
17. C++有指针,Java没有。
18.附上C++在32位和64位系统的主要长度对比:

Java与C++的区别

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
6个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这