一、基本数据类型
java的数据类型可以分为两大类:基本类型和复合类型。
基本类型:整型(int,short,long,byte)、浮点型(float,double)、布尔型(boolean)、和字符型(char)
复合类型:数组,类,接口
1.整型
数据类型 | 所占内存空间/位 | 数的范围 |
byte | 8 | -128~127 |
short | 16 | -32768~32767 |
int | 32 | -2^31~2^31-1 |
long | 64 | -2^63~2^63-1 |
整型以补码的形式存放在内存中。
2.浮点型
数据类型 | 所占内存空间/位 | 有效数字 | 数值范围 |
float | 32 | 7个十进制位 | 约+-3.4x10^38 |
double | 64 | 15~16个十进制位 | 约+-1.8x10^308 |
3.字符型
用char表示。2字节(16位)来存放一个字符,并且存放的不是ASCII码是Unicode码。
4.布尔型
用boolean表示。只有两个取值true和false。
二、常量
常量包含整型常量,浮点型常量,字符型常量,字符串常量以及布尔常量,符号常量(用final来定义 eg final int MALE = 1;)
1.整型常量
十进制(正数,负数,0),八进制(以0开头)和十六进制(以0x或0x开头)
2.浮点型常量
浮点型常量有两种表示形式。
普通的十进制数形式。由数字和小数组成。如0.123;123.0;0.0;.123;123.都是合法的
指数形式。1.5E5表示1.5x10^5;2.9E-7表示2.9x10^-7。注意字母E(也可以是小写e)之前必须有数字,且E后面的指数必须是整数。如E3,2E1.7均不合法。
java规定浮点数默认双精度,如果需要指定单精度,需要在末尾加上F或f.比如12.5F,2E5f。
三、变量
java用来表示变量名、常量名、方法名、类名的有效字符序列都成为用户自定义标识符,简称标识符。eg:int a = 1;a就是一个标识符。
变量包含整型变量,浮点型变量,字符变量,布尔型变量。
1.浮点型变量
浮点数的采用二进制方式存储的,二进制浮点数往往不能精确表示一个十进制小数,即使这个小数是一个有限小数,比如1.3,它在内存中也是一个无限小数,即可能是1.299999,也可能是1.300001。所以尽量避免直接比较两个浮点数是否精确相等。通常的方法是比较两个两个浮点数的差值是否足够接近0。
2.字符变量
将一个字符存放到字符变量中,实际上并不是把该字符本身存放到内存单元内,而是将该字符的Unicode码存放到内存单元中。比如字符‘A’的Unicode吗是0x0041,它会以二进制存储在内存中。
它的存储类型和short很相似,其实Java确实将字符变量作为无符号的短整型数据来处理的,这就决定了Java中的字符数据和整型数据之间可以通用。用户对可以对字符型数据进行算数运算,此时相当于将它的Unicode码看成一个整数进行运算。
Java规定一个局部变量在使用之前必须要初始化,否则无法通过编译。局部变量指的是定义在方法里的变量,它只有在方法里有效,在方法外无法使用。
四、数据类型转换
转换基本规则:范围小的转为范围大的,精度小的转为精度大的。按照数据转换时是否有会损失精度,Java中的转换分为扩展转换和缩减转换。
1.扩展转换
原类型 | 目的类型 |
byte | short,int,long,float,double |
short | int,long,float,double |
char | int,long,float,double |
int | long,float,,double |
long | float,double |
float | double |
eg:byte+int —— int+int;int+double —— double+double
Java规定,如果两个数据类型没出现在同一行的两列,则两个数据都必须转换成同一类型,若这个目的类型有多个可以选择,则选精度,范围最小的那个。
eg: byte+char —— int+int。
扩展转换是系统自动进行的,又称自动类型转换,不会损失精度。
2.缩减转换
Java规定凡是符合下表的转换,称为缩减转换。这种转换会损失精度,系统不会自动进行,需要程序员显示地指定。
原类型 | 目的类型 |
short | byte |
char | byte,short |
int | byte,short,char |
long | byte,short,char,int |
float | byte,short,char,int,long |
double | byte,short,char,int,long,float |
要将第一列的数据转换成第二列的数据类型,必须使用强制类型转化。基本格式:(数据类型)数据
eg: int a —— (byte)a
强制类型转换也可用在扩展转换中,使阅读更清晰。
eg: long+int+byte —— long+(long)int+(long)byte
注意:无论扩展转换还是缩减转换,只是产生元数据的一个副本,转换结果对元数据没有影响。