4. java和c++的不同点
4.1 java是解释型语言,c++是编译型语言。
4.2 java是纯面向对象的语言,所有的代码(包括函数、变量)都必须在类中定义。而c++中还有面向过程的东西,比如全局变量和全局函数
4.3 c++支持多继承。java中的类支持单继承,不支持多继承,但是支持多重继承;java中的接口是多继承,类对接口的实现也是多实现
4.4 c++有指针,java没有指针
4.5.1 引用不同
对于 类名 变量名;这条语句来说
c++中,实际上创建了对象,留出了这个对象的数据的空间
java中,只是创建了一个放置某一个对象的存储地址的空间。
4.5.2 赋值不同
在c++中,b2=b1;是把b1对象的所有数据拷贝到另一个叫b2的对象中;而java中,这条语句是向b2拷贝了b1所指向的存储地址。现在b1和b21实际上指的是同一个对象,他们都是这个对象的引用。(java中如果想要从一个对象中复制数据到另一个对象中,必须保证一开始就有两个对象,然后分别拷贝每一个字段,等号不起复制作用)
4.5.3 new操作符
java :在java中任何创建对象的工作都必须使用到new,但是new在Java中返回一个引用
c++:返回一个指针
释放空间(使用new向系统申请的空间,不再使用):
java:不需要担心,有垃圾收集机制(GC机制)。Java每隔一段时间就去查看每一块由new开辟的内存,看指向它的有效引用是否依旧存在。如果这个引用不存在,系统会自动将这块空间归入空闲内存区,这个过程叫做垃收集。几乎不可能出现“存储泄露”。
c++:需要开发自己管理内存,析构函数,使用delete。容易忘记删除存储空间,导致“存储泄露”,从而消耗系统资源
【析构函数:C++中析构函数是提供一个在对象删除前可以释放这个对象所占用的资源的机会,但是Java并未提供“析构函数”或者类似的概念。】
4.5.4 相等与同一
Java中,基本数据类型使用==是判断两个变量是否有相同的值,但是进行对象判断时,判断的是类的引用是否一致(是否指向同一个对象)。java判断两个对象是否有相同的数据,使用Object类中的equals方法(Object类是所有类的根类)
c++中,==不光进行两个数值型变量是否含有相同的数据,也会判断两个对象是否有相同的数据。
4.5 重载操作符
c++中,可以重新定义+、*、=及大多数其他操作符,以便使他们在特定的类中达到不同的效果。
java中没有重载操作符,但是可以使用命名的方法,比如add()或者其他名字
4.6 基本数据类型
boolean,byte,char,short,int,long,float,double
4.6.1 真/假
c/c++:用整数来表示真假(非0为真,0为假)
java:使用独立的类型boolean来表示真假(true,false)
4.6.2 数据类型的字节
c/c++:int型的大小可能不同,取决于运行的计算机环境
java中,一个int型的变量永远是32位(4字节),与不同操作系统对应不同的jvm造成的java跨平台有关
Java没有Sizeof()。在C\C++中,sizeof()操作符可以告诉我们为数据项分配的字节数,因为C++中不同的数据类型在不同的机器上可能有不同的大小。但是Java中所有数据类型在所有机器中大小都是相同的。(例如,C++的int在16位机器上为16位,在32及以上为32位,long在32位及以下为32位,在64位上为64位)
4.6.3 转换
java:相较于c/c++,java属于强类型语言。在其他语言中可以由系统自动进行的替换,在java中需要显式的替换,否则会出现ClassCastException(类型不匹配)
c++:支持强制自动转型
4.7 输入/输出
【并非只有列举的,只是常用的输入/输出方法】
c:输出:printf() 输入:scanf()
c++:输出count() 输入:cin()
4.8 作用域(c、c++、java的作用域由花括号的位置决定)
{
int x=12;
{
int x=96;
}
}
以上代码在c/c++中是合法的(c/c++会将较大作用域的变量隐藏起来),但在java中编译器会报告该变量已定义(java不会隐藏)
4.9 基本成员的默认值
当变量作为类的成员时,java才确保给定默认值,以确保那些基本类型的成员变量得到初始化,但是c++没有此功能。而对于局部变量未初始化,c++编译器会对其予以警告,java则会视为错误(没有使用不会报错;不初始化但要使用,会报错)。
4.10 移位操作符
java中新增了一种“无符号”右移位操作(>>>),它使用“零扩展”,无论正负,都在高位插入0.这是c/c++没有的。
4.10 类型转换
java允许我们把任何基本数据类型转换为其他基本数据类型(布尔不参与)
4.11 goto
c++中goto起跳转作用
java中有goto(保留字),但是不起作用。java是采用做标记来实现跳转的
比如:
```java
ok:
for(int i=0;i<50;i++){
for(int j=0;j<20;j++){
//break;
//continue;
//continue ok;
if(j=5) break ok;
}
}
4.12 Java没有Struct或者Union
4.13 java的泛型不允许使用基本数据类型
4.14 数组
在c++中,数组定义时,已经分配存储空间,并可以使用。 (定义时指定数组大小)
在java中,数组定义时,int arr[],只字义了数组变量,数组是不可以使用的。 只有数组new以后,才会创建数组,分配存储空间,并可以使用。 (定义时指定数组大小是非法的,创建时指定数组大小)
参考资料:
https://blog.csdn.net/qq_26079093/article/details/94477842?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158755771919724845045336%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=158755771919724845045336&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-1
推荐查看:https://blog.csdn.net/u012485480/article/details/79592072
大部分来自于《Java数据结构和算法》