zoukankan      html  css  js  c++  java
  • Java语言与C++语言区别

    最近有点空闲时间,学习了Java语言。教材《Java简明教程》第四版,清华大学出版社。本人以前有C++基础,所以主要总结下两者区别。

    一、基本类型和运算

     1.布尔常量,true和false不是数值,不能进行算术运算。而C++实际是整型。

    2.字符串常量,Java作为对象,有自己的属性和方法。C++,采用‘’结束的字符数组。

    3.字符型变量,Java采用Unicode编码,长度为16位,最大值65535。而C++是8位,最大值128。

    4.局部变量检查,当局部变量和外层如类中全局变量相同时,提示编译错误。Java认为相同的命名会容易导致对程序的误解和混淆。C++则“小范围变量屏蔽大范围变量”。

    5.变量赋值,类中未给出初始化值,将默认为0,或者空等。而C++不确定的值。

                        在方法中,未给出初始值,Java无法通过编译。C++则不会。

    6.类型转换,int x=2+3.14; C++编译通过。Java编译失败,必须改成如下进行强制转换:

           int x=2+(int)3.14;

    7.引用,Java规定基本类型按值传递,对象类型按引用传递。返回值类似。但是Java引用是没有任何特殊标志,而C++则用‘&’表示。

    8.%运算符,Java不但可以对整型运算,浮点型也可以。C++只能对整型运算。

    总的来说,Java是一种强类型语言,对变量和常量的类型检验比较严格。但同时又具备更好的扩展性。

    二、类和对象

    1.首先,从编辑和文件管理而言,Java的类定义和实现放在一起。C++是分开的。

    2.关键字this,Java中是特殊的引用,既可以指代对象,也可以指代构造函数(也只能放在构造函数的第一句,所以用在构造函数的重载函数中)。

        而C++中,this只能是指向自己的指针,没有指向函数的功能。

    3.Object类,Java所有其他类的祖先。C++没这个概念。因为Java基于类设计语言,C++可以基于函数。

    4.关键字super,当父类定义了默认构造函数即无参数构造函数,子类可以自动调用父类的该构造函数。

    但是当父类定义了带参数的构造函数时,子类必须通过super调用父类的该构造函数。C++通过初始化列表。

    5.关键字final,可以修饰变量和参数,相当于C++中的const。也能修饰类和方法,表示不能被继承,表示终极类和终极方法。

    6.关键字abstract,修饰类和方法,表示抽象类和抽象方法,一般用来被继承。修饰方法时,类似于C++中的纯虚函数。

      

    三、字符串处理

     C++对字符串处理常用数组,没有提供字符串对象,如果想要使用对象,则需要自己封装。而Java提供了两个类和一系列方法。

    1.String类,常量,值不会改变。注意,关系操作符‘==’用于地址比较,而equals方法,用于内容比较。

    2.StringBuffer类,带缓冲区的字符串,值可以被改变。

    3.运算操作符,操作符‘+’可以连接两个String对象,不能连接两个StringBuffer对象。Java取消了运算操作符,但保留了String的‘+’和‘+=’。

    4.StringBuffer对象到String对象的转换,通过toString()方法。

    5.其他,String对象可直接赋值,StringBuffer赋值则通过构造函数。

    四、多线程

    C++多线程往往需要自己编写。而Java标准库支持多线程。例如Java的垃圾回收器是一个低优先级的线程。

    1.Java定义了一个类Thread和一个接口Runable。

    2.采用synchronized实现多线程同步,协调资源,保护共享变量和方法。

    3.多线程优先级,范围1-10,默认值5。

    4.线程间通讯,主要有三个方法:wait(),notify(),notifyAll()。其中,wait()和notify()必须成对出现。

    五、其他

    1.Java先编译后解释执行,而C++是纯编译方式。所以后者执行速度快。

    2.Java结构中立,字节码的中介方式,与运行平台无关。所以可移植性好。

    3.Java的变量长度确定不变,与运行平台无关。如int类型都是四个字节。而C++不一样,跟平台有关。所以Java移植性比C++佳。

    4.Java仅支持单继承,支持多接口(关键字interface)。C++支持多继承,甚至还可以虚拟继承。

    目前学习到的主要区别是这些,欢迎批评指正。

      

  • 相关阅读:
    linq to entity group by 时间
    Entity Framework Core for Console
    EF Core 多个DbContext迁移命令
    .net for TCP服务端 && 客户端
    创建Windows Service
    EF Code First 快速创建
    在Docker中创建Mongo容器的后续设置
    Docker入门
    Python之collections.defaultdict
    Hough transform(霍夫变换)
  • 原文地址:https://www.cnblogs.com/orange-CC/p/12298995.html
Copyright © 2011-2022 走看看