一、八种基本数据类型

1、整数类型

①byte 占一个字节。 常用作缓冲数组。

②short 占两个字节 。

③int 占四个字节。 最常用。

④long 占8个字节。注意long类数值后面有一个后缀L。

注意:*Java没有无符号(unsigned)整数。

*所有的数值类型所占据的字节数与平台无关,保证了可移植性。

2、浮点类型

①float 占四个字节。后缀带有一个F。例:float f=3.4L;

②double 占8个字节。默认是double类型。例:3.14

注意:*double的精度是float的两倍,一般情况下能够使用double就不要使用float,否则使用不当容易出现意想不到的异常。

现代计算机搞运算能力下,可以忽略它们被处理的速度差异。

*有三个特殊的浮点数值:正无穷大(Double.POSITIVE_INFINITY)、负无穷大(Double.NAGATIVE_INFINITY)、不是数值(Double.NaN)。

这三种数值一般很少用到。另外判断非数值不能使用==号,而是使用Double.isNaN(验证对象)。

*浮点数不能使用在禁止出现四舍五入的场合,比如金融计算中。浮点数相乘除和相减都会出现误差。金融计算可以使用BigDecimal类,或者

借助第三方库。

3、文本类型

①char 字符常量为单引号括起来的字符。

注意:*Java字符采用Unicode编码(UTF-16)。一个字符占两个字节(一个字符是肯定可以容纳一个汉字的)。

*强烈建议不要使用该类型!最好能够使用String类型对字符进行操作。

4、逻辑类型

①boolean

注意:数值型和boolean型之间不能够相互转换。Java中不可以使用0或者非0的整数代替true或false。这点与c不同要小心。

5、引用数据类型(类、接口、数组)

二、数值之间的类型转换

当整型、字符型、浮点型数据在混合计算中相互转换的时候(Boolean类型不可以转换为其它类型,再次强调它不能够转换为0或1),遵循以下转换规则

1、向上转型(自动转换)

精度小的类型会自动转换为精度大的类型:byte、char、short->int->long->float->double。byte、char、short不会直接相互转换,它们在转换过程中先要转换

为int类型。

2、向下转型(强制转换)

精确度大的类型转换为精确度小的类型:需要加上强制转换符。但要十分小心,很容易造成精度下降或者溢出(有时候会造成莫名奇妙的bug)。

例如:short s1 = 1; s1 = s1 + 1;// 编译错误。1是int类型,s1 + 1运算时s1会自动向上转型成为int型,s1 + 1运行结果也为int型,赋值给s1的时候是向下转型。需要强制转换。

例如:而short s1 = 1; s1 += 1;// 正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

例如:float f=3.4;// 编译错误。3.4是double类型,转换为float类型时是向下转型,需要强制转换:float f = (float)3.4;

3、多种数据类型混合在一起计算的时候,要转换为精度最大的数据类型后再进行计算。

三、一些常见的问题

1、Java一个汉字占几个字节:

2、基本数据类型的包装类型

*为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

*Java 为每个原始类型提供了包装类型:

- 原始类型: boolean,char,byte,short,int,long,float,double

- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

*一个与自动拆箱与装箱的问题: