在讲解基本类型数据运算之前我们首先来了解各种基本数据类型:
Java中一共有8中基本数据类型,并且每种数据类型所占的存储空间是固定的,这种特性也增加了java的可移植性,这一点和c语言c++是不同的,因为java是在虚拟机上运行的,数据类型和操作系统以及硬件间的适配是通过虚拟机来实现的。
基本介绍
Java中的8中基本数据类型:byte short int long float double boolean char
byte short int long都表示有符号数,即最高位是用来表示正负的,0表示正,1表示负;
byte占一个字节,表示范围:-~2^7-1 即-128~127
short 占两个字节,表示范围:--~2^15-1
int 占四个字节 ,表示范围:-~2^31-1
long 占八个字节,表示范围:-~2^63-1
float 占四个字节, double占八个字节
char 占两个字节,一个char代表一个unicode码,范围:0~2^16
boolean 占一个字节,只有true和false两个值
使用注意事项:
一、 在程序中使用整数常量,默认该常量为int型
二、 如果一个整数的值大于int类型的范围,则需要将其赋值给一个long类型的变量,并且必须在该数的后面加上l或者L
三、 程序中小数是默认为double类型的,若要将其赋值给float类型的数据则需要在数据后面加上f或者F,或者直接强制转换
四、 可以直接将byte、short、int、long类型的数值赋值给float和double;
类型转换与运算
类型转换包括强制类型转换和自动类型转换;
Java允许整型、字符型、浮点型数据进行混合运算,运算时不同类型的数据线转换为同一类型后再进行运算,转换的原则为:
操作数1 | 操作数2 | 转换后的类型 |
byte 、short、int | byte 、short、int | int |
byte 、short、int | long | long |
byte 、short、int、long | float | folat |
byte 、short、int、long、float | double | double |
char | int | int |
当发生上述的运算时就会进行自动类型转换,转换结果如上;
而强制类型转换是不管是什么类型都可以将其转换为其他的类型(可能会出错),格式如下:
(想转换为的类型)类型变量;
例如:int a=(int)1.2;
这样做可能会造成精度的丢失,还有有些类型是不可以相互转换的,这样的话就会出错,可以强制类型转换的前提是要可以相互转换。例如boolean是不能进行类型转换的。
隐式类型转换
隐式类型是这样一种现象,前面我们说到整数是默认为int型的,如果没有做其他优化的话 byte a=3;是有错误的,但是实际上这句话是可以正常编译的,这是因为虚拟机做了隐式类型转换,当我们将一个整数赋值给byte、short、char类型的变量时,如果该整数不超过对应变量的取值范围时就会进行隐式类型转换,隐式类型转换的前提是赋值的数是整数常量。例如:
byte a=9;//正确
int b=9; byte c=b;//错误,因为b是一个int类型的变量
常见错误举例
例如:byte a=1;
a=a+1;//错误,因为等号右边已经转换为了int类型,而左边为byte类型
a+=1;//正确,这句话等效于a=(byte)(a+1);
例如:
byte a=3+4;//正确,编译时先算出3+4等于10,再进行隐式类型转换
byte b=3; byte c=4;
byte d=b+c;//错误,因为在计算是就会发生自动类型转换将等式右边转换为int,见上面表格第一行;
大家有如有遇到基本类型数据相关问题的欢迎留言