首页 > 代码库 > Java基础一:基本数据类型
Java基础一:基本数据类型
一、八种基本数据类型
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)、NaN(Double.NaN)。
则三种数值一般很少用到。另外判断非数值不能使用==号,而是使用Double.isNaN(验证对象)。
*浮点数不能使用在禁止出现四舍五入的场合,比如金融计算中。浮点数相乘除和相减都会出现误差。金融计算可以使用BigDecimal类,或者
借助第三方库。
3、文本类型
①char 字符常量为单引号括起来的字符。
注意:*Java字符采用Unicode编码。一个字符占两个字节(一个字符是肯定可以容纳一个汉字的)。
4、逻辑类型
①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一个汉字占几个字节:http://www.cnblogs.com/God-/p/6006749.html
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
一个与自动拆箱与装箱的无聊问题:
public
class
Test03 {
public
static
void
main(String[] args) {
Integer f1 =
100
, f2 =
100
, f3 =
150
, f4 =
150
;
System.out.println(f1 == f2);// 返回true
System.out.println(f3 == f4);// 返回false
}
}
Java基础一:基本数据类型