C语⾔和JAVA的区别
java语⾔和c语⾔的区别:
un 公司推出的Java 是⾯向对象程序设计语⾔,其适⽤于Internet 应⽤的开发,称为⽹络时代重要的语⾔之⼀。Java 可以⽤认为是C 的衍⽣语⾔,与C 在⼤量元以内成分保持相同,例如此法结构、表达式语句、运算符等与C基本⼀致:但Java更简洁,没有C中冗余以及容易引起异常的功能成分,并且增加了多线程、异常处理、⽹络编程等⽅⾯的⽀持功能。本⽂从多⾓度对Java与C进⾏对⽐分析,为C与Java语⾔的学习提⾼⼀些借鉴。
1、调法结构
C与Java的词法结构很相似,针对程序中的空⽩符、标识符、注释、常量、运算符、分隔符和关键字等进⾏详细对⽐分析。
1.1、空⽩符和注释
空⽩符包括空格、制表符和换⾏符。
C中存在两种注释:
1)注释语句以/开头,以/结束。
2)注释可以⽤//开始,延伸到下⼀个⾏终结符。
Java包含了C的两种注释和空⽩符。
1.2、标识符
C的标识符集合是Java 的标识符集合的⼀个⼦集。C中标识符由⼤⼩写拉丁字符、数字和下划线组成的,且不能以数字开头,不能与关键字相同;
Java的标识符由⼤⼩写拉丁字符、数字、下划线以及$组成,也不能以数字开头;
1.3、关键字和保留标识符
关键字是语⾔的特殊符号,C和Java的关键字较相似。
有些关键字Java中独有的,如下图所⽰:
abstract
assert
boolean
byte
catch
class
extends
Final
finally
implements
import
instranceof
interface
native
New
package
private
protected
public
strictfp
super
synchronized
this
throw
throws
transient
try
有些关键字在C中使⽤⽽Java未使⽤,下表所⽰为C中独有的关键字。
Auto _bool _Complex extern _Imaginary inline register
restrict signed sizeof struct typedef union Usigned
1.4、常量
常量包括4中类型:整形、浮点型、字符型和字符串型。对于常量,C与Java存在细微的差别。
1. C中整型常数中只有⽆符号整型常数⽐Java的整型常数⼤,Java中没有后缀long long型和unsigned;c语言char的用法
2. C 和 Java 的字符常量和字符串常量很接近,C中有续⾏机制,即如果字符串太长,⼀⾏放不下,则可以在⾏末加上⼀个反斜杠,反斜
杠和⾏终结符被忽略,使字符串常量可以写在多⾏中,并且所有的源⾏都可以续航。但Java 中,不允许字符串跨越多⾏。
3. C中每个字符串都是由空字符("\0")来结尾,⽽Java 的字符串中没有如此的终结符。
4. 在C中,"0"还可以表⽰布尔值假(false)或指针空(NULL),在Java采⽤保留标识符false 或 NULL。
1.5、运算符和分隔符
Java 中⼤多数运算符和分隔符与C是兼容的,C中提供的运算符⼏乎完全适合于Java语⾔。两者的细微差别是:
1)C中独有间接成员运算符(->)、取值运算符(*)、地址运算符(&)、逗号运算符(,);
2)Java 不提供指针运算符,增加了对象操作符 instanceof、字符串运算符+和零填充的右移》等;
3)与C不同的是,Java中算数运算符不能⽤在布尔类型上,逻辑运算符的操作数只能是布尔型⽽不能是整型,在转换中需要进⾏特殊处理;
4)C中利⽤ sizeof 进⾏数据分配和释放内存以及获取的数据的个数,但在java中没有此运算符,因为所有的数据类型在所有机器中的⼤⼩都是相同的;
2、数据类型
C中数据类型分为:算书类型、指针类型、数组类型、结构类型、联合类型、枚举类型、函数类型和void类型,以下对上述类型在Java与C的异同以及类型转异换进⾏⽐较分析。
2.1、算术类型
C中算术类型包括整型和浮点型。C中的整型有字符类型、布尔类型和枚举类型。C中类型⼤⼩依赖于C编译器的具体实现;
Java对基本数据类型⼤⼩有明确约定,其中char 是⼀个2字节的⽆符号整数,⽤来存储Unicode字符。除char类型外,Java不⽀持⽆符号整型,其它整型都是⽆符号的;
并且C中char类型的⽤法⽐Java中灵活。C中char类型的数组和指针可以⽤来表⽰字符串,⽽Java须使⽤string类表⽰。
2.2、结构和联合类型
Java中没有结构类型;在C中声明结构变量时编译器会为其分配内存空间,⽽在Java中需要⽤new来分配空间;C中允许不完整初始化以及声明匿名结构(可嵌套),在Java中确实不被允许的;Java中没有与C中对应的联合类型这种语⾔结构。
2.3、枚举类型
C中,枚举类型声明代表整数常量的符号名称,枚举常量事实上是int 类型;
Java 中,存在枚举类型,关键字enum 声明的枚举变量事实上是java.lang.Enum 的⼀个⼦类,可以为其添加属性和⽅法,虽然其中的枚举常量也是int 类型,但不能⽤整数初始化,也不能作为整型使⽤。
2.4、void类型
C 和 Java 都⽀持 void 类型。
C 中void 可代替函数参数表以及表⽰函数不带参数,在建⽴ void * 类型时,void * 类型的变量可以存储⼀个指向任意类型或函数的指针;
Java 中的 void 仅表⽰⽅法没有返回值。
2.5、typedef
C 中 typedef 不是预处理指令,⽽是为某⼀类型创建另外名字的,并且C允许在⼀个typedef 中引⽤另⼀个 typedef 定义的名字;
Java 中没有与之对应的机制;
2.6、数据类型转换
Java 语⾔属于强类型语⾔,对数据类型兼容性要求⽐C更严格,这保障了他的安全性和健壮性。Java中所有的数值传递,⽆论是直接还是通过参数传递的都先要进⾏类型兼容性的检查,任何类型的不匹配的都会产⽣编译错误。在Java 中,整数类型、浮点数类型和字符类型是彼此兼容的,但和布尔类型是不兼容的,除了布尔型和枚举类型,Java中允许吧任何基本类型转换成别的基本类型;
C中表⽰真/假的变量⼀直是由int 类型来表⽰的。C允许从算术类型转换为布尔类型。Java 不允许在这两种类型之间进⾏隐式和显式的转换,也不能⽐较布尔型和算术型。
3、表达式和语句
Java的表达式和语句与C的⼏近⼀致,存在⼀些细微差别:在Java 中 if、write、for 语句中的条件表达式应该是布尔型,在C中可以是整形;Java 不提供got o语句,goto语句的存在可以改变程序的运⾏⽅式,是程序的安全性和稳定性降低,Java利⽤代表号的break 语句和continue语句实现转移功能;表达
式语句在J ava中⽐C有更多的限制,Java中只允许复制、函数调⽤、⾃增减、new 表达式等出现在表达式语句中。
4、函数
1)对于变量和函数,C需要实现声明和定义,⽽Java中只有定义,没有声明;
2)由于C不是⾯向对象的,所以C中所有全局变量和函数本质上对Java⽽⾔都是静态的。Java是⼀种⾯向对象语⾔,它不允许在类和接⼝之外声明函数,包括 main 函数和变量。⽽在C中,常会出现在⼀个⽂件中定义⼤量的全局变量,在其他⽂件中通过引⽤声明这些变量来实现共享,但Java不允许有全局变量或函数;
3)当C中函数返回值的类型和声明时类型不相符时,函数的返回值会⾃动转换为这个类型之后再进⾏函数返回;⽽在Java中⾯对次情况时,需要加⼊强制类型转换;
4)C中函数调⽤参数计算的顺序是未定义的,⽽Java 是从左到右有顺序的;
5)C中如果变量或函数在别的⽂件中定义的,必须使⽤extern 来声明该变量或函数。在单个⽂件编译的时候它们是不可见,⽽在链接阶段才可见。Java的编译器没有这种链接阶段,所有需要的⽂件在编译时必须可见;
6)C和Java程序都从 main 函数开始执⾏。C中main 函数⼀般需要有 argc,argv 两个参数,argc 存在命令⾏参数个数,argv 存在实际的命令⾏参数;java 中main 必须⽤ stringargs[] 作为⽅法的参数,它是⽤来接收运⾏系统启动Java 应⽤程序时所⽤的命令⾏的参数;
7)C和Java中可以调⽤ exit 函数来终结程序;C中可利⽤abort 函数来退出⾮正常终⽌的程序,Java 中没有相对应的策略。
5、数组
1)数组是同⼀类型的数据元素的有序序列。Java 程序在编译和运⾏时严格地检查所有数组的边界,提⾼了程序的安全性;在C中并没有提供边界检查功能,如此可以提供程序的运⾏速度;
2)在C中,数组⼀般是在定义时就指定其⼤⼩,由编译器分配数组所需的⼀块连续的内存空间,⽽且数组中的元素是按顺序存储的;在Java 中,数组定义时不被允许指定数组的⼤⼩,同时也不会为其分配内存空间,需要⽤new 运算符显⽰创建,或者通过初始化⽅法隐式创建,数组所占⽤的空间由Java的来及收集器⾃动地回收;
3)C 中如果部分初始化数组,未促使花的元素则被设置为0。Java并不直接⽀持多维数组,但可以创建数组的数组,⽤这种⽅法可以实现多维数组;
4)值得注意的是,在C中数组实际得到的是它的指针,⽽在Java中得到的是引⽤,不是指针。在Java中程序只能通过下标运算符和访问数组元素,不能像C中的指针那样通过整数加减运算来访问元素;
5)C允许数组的牵引类型可以为long型,⽽Java 的要求是 int 型。
6、预处理器及头⽂件的⽐较
Java没有预处理器,也没有头⽂件;C中预处理器只是接收⼀些⽂本并将其转换成为其他⽂本,编译器对预处理的源程序进⾏编译,在C中通常⽤头⽂件来声明原型以及全局变量、库函数等。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论