一、基本数据类型
java中有八种基本数据类型,分别为boolean,byte,short,char,int,long,float,double。除了这8种基本数据类型,其他都是引用类型。
另外在计算机内存中,1字节=8位。
1.逻辑类型:boolean
可以将变量定义为true,false两种。默认值为false(局部变量的话必须要有初始值);分配一字节内存。
public class Main {
public static boolean temp;
public static void main(String[]args) {
//boolean类型可以定义为true,false
boolean temp1 = true ;
boolean temp2 = false;
System.out.println(temp); //输出为false
}
}
2.整数类型
在java中整型没有无符号之分,因此每个整数类型的变量都会占用一位来用作符号位。
(1).int型
例如: int num=100;
初始值为0,在内存中占用4个字节,32位。那么系统定义一个int型变量就会分配四个字节的连续空间来存储。
因为会占用一个符号位,所以int型变量的二进制最大值为31个1,转换为10进制就是为,那么同理int型变量的二进制的最小值就是第32位为1和第1位-31位为,又因为计算机中负数一般用补码表示。那么int型变量最小值为,所以int型变量的取值范围为~.
public class Main {
public int a;
public static void main(String[]args) {
int num = 100;
Main m= new Main();
System.out.println(m.a); //输出0
}
}
(2).byte型
例如: int num1=127;
byte型变量,初始值为0。只占用内存中的一个字节,因此byte型变量的的取值范围只有~,也就是-128 ~ 127.
使用byte型声明变量时会容易产生数值溢出。就比如:
public class Main {
public static void main(String[]args) {
byte a=127;
System.out.println(++a); //会输出-128
}
}
之所以byte型变量127+1输出会是-128,是因为计算机进行运算时,是将所有进制转换成了2进制,那么127就已经占满了一个字节了,127二进制表示为01111111,当它加1后就会是10000000.计算机就会认为10000000是负数,负数在计算机中又是用补码表示的。所以就会输出-128.
(3)short型
初始值为0,在内存中占用2个字节,占16位。那么short型变量的取值范围就是~.
(4)long型
long型变量需要后缀加L来表示,初始值为0,在内存中分配8个字节,占64位,那么long型变量的取值范围是~
3.字符类型
在c语言中char型变量只占用1字节,而java的话,char型变量占用2字节,占16位。即遵循Unicode编码集中的所有字符(ASCLL码的扩展)。没有符号之分,取值范围为0~
char型变量需要' '表示一个字符,可以是一个字母,也可以是Unicode字符集的对应的数字序列,字符在运算时会自动转换成所对应的数字序列。
例如:
char ch='A';
char c=97;
public class Main {
public static void main(String[]args) {
char a='a'; //Unicode编码集对应97
char b='b'; //Unicode编码集对应98
char c=97; //Unicode编码集97就是字母a
System.out.println(a+b);//输出195
System.out.println(c); //输出a
}
}
3.浮点类型
(1)float型
单精度浮点型float,声明时初始化必须有后缀F或者f。(可以指数表示法,如2e31)
例如:float num = 1.0F;
float型变量在内存中占用4个字节,32位。可以保留8位有效数字(不是小数点后8位)。
有效数字:从左往右第一个非0数开始计算数字的个数,如0.817 有效数字为3位。
public class Main {
public static void main(String[]args) {
float p=74333.1132445F;
System.out.println(p); //输出的是74333.113
}
}
(2)double型
双精度浮点型double,声明初始化时后缀为d或者D,当然此后缀可以省略。
例如: double num = 1.0;
double型变量在内存中分配8个字节,64位。可以保留16位有效数字
public class Main {
public static void main(String[]args) {
double p=1111174333.113244115;
System.out.println(p);//输出为1.111174333113244E9
}
}
二、基本数据类型转换
当把一种基本数据类型变量转换成另一种基本数据类型就会有类型转换。
按照基本数据类型精度的由低到高排列为:(一般浮点数比整数的精度要高)
byte short char int long float double
1.把精度等级低的转换成精度等级高的,就会发生自动转换,如:
int num = 10;
long num1 = num;//可以自动转换成long数据类型
2.把精度等级高的转换成精度等级低的话,如果按照自动转换的话就会出现编译报错,就需要强制转换(但是精度缺失和数值溢出问题)
强制转换就是在要转换的数的前面增加一个:(要转换的数据类型) 就可以完成转换。
float num = 1.0F;
int num1 = (int) num;//添加(int)实现强制转换(有精度缺失等问题)