基本数据类型
在我们的日常生活中出现的数字有小数和整数之分,那么在程序中出现的数字我们是不是也有小数和整数之分呢?分别为什么类型呢?长度为多少呢?下面一一来看
一、基本数据类型的分类
字节是计算机中存储的最小单位,一个字节等于八位。1字节 = 8 bit(对应二进制中的位数)
1.整数类型
byte(字节型):1个字节8位
取值范围:-128~127
short(短字符型):2个字节16位
int(整型):4个字节32位
取值范围:-21亿~21亿
long(长整型):8个字节64位
2.浮点类型
float(单精度浮点型):4个字节32位
注意:float的值一定要加上 f
double(双精度浮点型):8个字节64位
3.字符类型
char(字符类型):2个字节16位
取值范围:0~65535
注意:必须使用单引号括起来,只能是一个字符,比如 ‘男’ 或 ‘女’
4.布尔类型
boolean(布尔类型):4个字节32位,只有真-true 和 假-false
二、数字字面量
理解:就是对应程序中出现的数字
整数数字默认int类型
小数数字默认double类型
三、数据类型的使用
public class Test01{
public static void main(String[] args){
//整数类型 - byte(字节型)
byte b = 10;
System.out.println(b);//10
b = 20;
System.out.println(b);//20
//整数类型 - short(短字符型)
short s = 30;
System.out.println(s);//30
s = 40;
System.out.println(s);//40
//整数类型 - int(整型)
int t = 60;
System.out.println(t);//60
t = 70;
System.out.println(t);//70
//整数类型 - long(长整型)
long i = 80;
System.out.println(i);//80
i = 90;
System.out.println(i);//90
//浮点类型 - float(单精度浮点型)
float j = 111.111f;
System.out.println(j);//111.111
j = 222.222f;
System.out.println(j);//222.222
//浮点类型 - double(双精度浮点型)
double f=333.333;
System.out.println(f);//333.333
f=444.444;
System.out.println(f);//444.444
//字符类型 - char(字符类型)
char c='a';
System.out.println(c);//a
c='我';
System.out.println(c);//我
//布尔类型 - boolean(布尔类型)
boolean bool = true;
System.out.println(bool);//真的
bool=false;
System.out.println(bool);//假的
}
}
四、基本数据类型的转型
取值范围的比较:byte<short<int<long<float<double
1.自动转型
含义:取值范围小的转大的类型,底层使用最高位(符号位)补位。
public class Test01{
public static void main(String[] args){
byte b = 10;//1字节8位 0000,1010
short s = b;//2字节16位 最高位补零 0000,0000,0000,1001
int i = s;//4字节32位 0000,0000,0000,0000,0000,0000,0000,1001
long l = i;//8字节64位
float f = l;
double d = f;
System.out.println(d);
//可以直接转。
byte b1=123;
double d1=b1;
System.out.println(d1);
}
}
2.强制转型
含义:取值范围大的转换为取值范围小的。
语法规则:变量=(强转类型)目标变量;
public class Test01{
public static void main(String[] args){
double d = 123.123;
float f = (float)d;//将double类型的变量d强转为float类型,再将强转后的数据复制给f
long g = (long)f;
int h = (int)g;
short j = (short)h;
byte k = (byte)j;
System.out.println(k);
//也可以直接强转
double i = 123.123;
byte j = (byte)i;
System.out.println(j);
}
}
3.特例
特例1
public class Test01{
public static void main(String[] args){
float f1 = 1;//int转float:自动转型,不会报错
//float f2 = 1.0;//1.0属于double,所以double转flaot:强制转型,会报错
//解决方案 两种:
//float f2 = (float)1.0;//解决方案1 将double(64),转成float(32位)浪费空间
float f2 = 1.0f;//解决方案2 直接将1.0认为是float(32位)类型,效率更高
System.out.println(f1);
System.out.println(f2);
}
}
特例2
public class Test01{
public static void main(String[] args){
byte b1 = 1;//1为int类型的数字字面量,但是1在byte的取值范围内就直接赋值。
//byte b2 = 128;//报错,1为int类型的数字字面量,但是128不在byte的取值范围内。
byte b2 = (byte)128;//解决方案
//底层分析:
//128--int -- 32位 : 0000,0000,0000,0000,0000,0000,1000,0000
//(byte)128 -- 8位 : 1000,0000 //最高位为符号位 1 为负号。
System.out.println(b1);
System.out.println(b2);//输出-128
}
}
今天就分享到这里啦~~~