**1.**前言:相信很多同志在疑惑,c语言和Java为什么都要学习数据类型,明明看起来没啥区别,但实际上Java的则更要繁琐。

**2.**首先,Java中的char是俩个字节,这是由于Java使用的是Unicode字符集,它能表示的字符量远远大于ASCII字符集,并且包括了许多语言,比如中文,拉丁文等等。因此按c语言的char容量(255),是远远不够存放。因此java的char容量也来到了2字节,由于我们都知道的,char无符号,则容量则有65535。
因此,Java的字符类型也可以表示许多c语言无法表示的字符,比如
int a=‘中’;可见,Java语言的全面。

**3.**其次,Java语言的整数型没有所谓的有符号和无符号,Java的整数型即可正数,又可表示负数。

**4.**再然后,Java中引入了c语言中没有的boolea类型(布尔类型),用于表示真假,其中布尔类型true为真,false为假。值得注意的是:这也导致c语言中0为假,不为0为真的说法在Java中是不成立的。

**5.**再再然后,Java中有许多的规定,这些规定在c语言中并不明显,因此是需要牢牢掌握的。
(1)Java支持小容量转大容量(自动类型转换机制),但不支持大容量转小容量(int相对long就是小容量),因此只能使用强制类型转换(但可能损失精度值),但short,byte,char比较特别,只要不超出它们本身的范围,不需要强转,如:byte a=15;。然后相对上的小容量还是大容量的排序如下:
byte<short<int<long<float<double
<char
注:浮点型无论如何都要大于整型。
(2)八种数据类型之间都可以互相转换,除了布尔类型。
(3)多种数据类型混合运算时,先转化为容量最大的那种类型再运算。
(4)byte,short,char三种特别点的混合运算,需要将其先化为int型再去运算。
(5)

**6.**还有就是,Java中的字面值都有默认的类型,比如整数1,默认类型为int型,如果要写一个long类型的变量,只能写出long a=100l(其中l可以是大小写),浮点型也有相似的规定,小数都默认为double类型,因此要写一个float类型的变量,则只能写float b=0.5f(f可以是大小写)。

**7.**Java中还有一个类型为字符类型,这也是c语言中没有的。