博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 和C++ 几个明显区别
阅读量:4109 次
发布时间:2019-05-25

本文共 1323 字,大约阅读时间需要 4 分钟。

JAVA 和C++ 几个明显区别

1.指针

Java中无法操作对象所指向的内存地址,new一个对象,你只能看不能改这个对象所指向的内存地址

C++ 可以随意修改对象所指向的内存地址

2.重写区别

class A{
public void test(){
System.out.println("A TEST"); } public void test(int a){
System.out.println("A TEST" + String.valueOf(a)); }}class B extends A{
//和c++不同 这里并不用担心 重写test后 会导致隐藏而无法调用test(int) //c++ 需要 using A::Test;才可以调用test(int) @Override public void test(){
System.out.println("B TEST"); }}

3.多态

还是用上面的代码

A a = new B();
  • 在 java中 调用a对象的test,其实是会调用到B类的test,
  • 而在c++ 中 如果函数前没有virtual,会调用到A类的test
  • 简单的说java 中所有方法,自带了virtual的效果。
  • 如果想屏蔽掉,只能重写后使用super调用。

4.析构函数

java没有析构函数

缺点:
c++ 可以在类析构方法中写close和清理代码
java 只能手动的调用close或clean代码 或 使用phantom引用+引用队列可以用来做是否要清理的判断,比较麻烦(这里说的要清理是成员对象被加入引用队列,并不是自己)

5. operator重载运算符

在java 中 你不能使用operator进行运算符重载,例子:

假设有个类叫Calc,有个成员是value,构造函数是value值

  • JAVA

    Calc a = new Calc(1);
    Calc b = new Calc(2);
    如果想让a对象的value和b对象的value相加,那么java只能这么做
    a.setValue(a.getValue()+b.getValue);
    要么就写add方法,方法里面传对象进行修改
    更麻烦一些的让a的value增加常量值,又得重载一遍add

  • C++

    只需要用operator重载运算符+就可以做到
    Calc & operator+(const Calc & b){this.value+=b.value;breturn *this;}
    现在我们只需要a=a+b;就可以了

6. 内存管理机制

JAVA为了方便使用,new对象到堆后,不需要手动释放,垃圾回收器会自动判断与GCROOT的关系,来进行自动的回收管理。

c++需要手动的free或delete创建的堆。但是现在基本应该没了,都是智能指针,一般情况下C/C++程序员需要自己实现内存池。

7. 引用类型

C++ 可以明确规定引用类型,左值或右值,并且有完美转发,解引

Java 完全是自动的,你无法控制参数是左值或右值

转载地址:http://rtlsi.baihongyu.com/

你可能感兴趣的文章
《HBase权威指南》读书笔记----简介
查看>>
zookeeper使用和原理探究(一)
查看>>
32位 系统 4G内存 不能完全使用
查看>>
java 图片压缩 缩放
查看>>
Hdfs NameNode 启动优化
查看>>
java 时间操作 --持续更新
查看>>
淘宝应对"双11"的技术架构分析
查看>>
hadoop HDFS 设置文件复试数(备份数)
查看>>
JPA初体验(使用Hibernate4实现)
查看>>
100个高质量Java开发者博客
查看>>
Java性能小技巧
查看>>
实际项目中的常见算法--有实现--好强大--慢慢学习
查看>>
Hadoop Shell命令
查看>>
Hadoop使用常见问题以及解决方法(转载)
查看>>
Linux系统下各个目录的功能划分
查看>>
玩转Hadoop的几个小技巧
查看>>
并发编程----共享变量
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>