数据类型
整数型
数据类型 | 占用空间大小 | 默认值 | 取值范围 |
---|---|---|---|
byte | 1 | 0 | [-128~127] |
short | 2 | 0 | [-32768~32767] |
int | 4 | 0 | [-2147483648~2147483647] |
long | 8 | 0L | [] |
1、java语言当中的“整数型字面值”被默认当做int类型来处理。要让这个“整数型字面值”被当做long类型执行的话,需要在“整数型在面试”后面添加l/L,建议用大写的L
2、java语言当中的整数型字面值有三种表示方式:
第一种:十进制【默认的方式】
第二种:八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种:十六进制【在编写十六进制整数型字面值的时候余姚以0x开始】
int a = 10;
int b = 010;//整数型字面值以0开头的,一般表示八进制
int c = 0x10;//整数型字面值以0x开头的,一般表示十六进制
System.out.println(a);//输出10
System.out.println(b);//输出8
System.out.println(c);//输出16
- 注意:输出的时候都是以十进制的形式
int i = 123;
//整数型字面值123和变量i都是int类型
//将int类型的123赋值给int类型的变量i,不存在类型转换
System.out.println(i);
long x = 456;
//整数型字面值456赋值给long类型的x,存在类型转换
//int类型占4个字节,long占8个字节
//小容量可以自动转换成大容量,称为自动类型转换机制。
System.out.println(x);
long y = 2147483647;
System.out.println(y);//运行正确
/*
long z = 214748648;//214748648被当做int字节处理,但是其字面值超出int类型范围
System.out.println(z);//运行错误
*/
//解决办法:将其当做long类型处理,在字面值后面面添加L
long z = 214748648;
System.out.println(z);//不存在类型转换,运行正确
- 大容量不能直接转换成小容量,需要加上“强制类型转换符”,但是这样可能会造成精度损失。
long k = 2147483648L;
int e = (int)k;
System.out.println(e);//结果为-2147483648,损失精度非常严重
- 强转原理:
例如:8个字节的int类型转换成4个字节的long就是将int类型的左边的4个字节删掉,就会得到4个字节的long类型。 - 特例:
当一个字面值不超过byte、short、char类型的取值范围,这个字面值可以直接转换成对应的类型。
//举例
byte a1 = 127;运行正确
byte a2 = 128;运行错误,需要在128前面加强制类型转换符(byte),编译会损失精度转换之后输出a2是-128
- 精度损失
计算机在存储数据是都是存的补码,输出是将补码转换成原码, - 求给定数值的补码
正数:
正整数的补码与原码相同
负数:
将其对应正数的二进制所有位取反后加1
浮点型
float | 单精度 | 4个字节 |
---|---|---|
double | 双精度 | 8个字节 |
- 注意:double 和 float 在计算机内部二进制储存的时候都是储存的浸近似值(无法储存无限的小数)
在java语言中所有的浮点型字面值,默认被当做double类型来处理,要想该字面值当做float类型来处理,需要在字面值的后面添加F/f
double b1 = 3.0;//不存在类型转换,编译正确
float b2 = 4.0;//编译错误
//修改错误有以下两种方法
float b3 = (float)4.0;//强制转换
float b4 = 4.0f;//不存在类型转换,4.0就是flaot类型
布尔型
booolean: | true | false |
---|---|---|
1 | 0 |
布尔类型占用一个字节,但是在实际开发中非常重要,经常使用在逻辑运算和条件控制语句中。
转换规则
关于基本数据类型之间的互相转换:
1、八种基本数据类型当中除了布尔类型之外剩下的7种类型之间都可以互相转换
2、小容量向大容量转换,称为自动类型转换
容量从小到大排序为:
byte < short < int < long < float < double
注意:任何浮点类型不管占用多少个字节,都比整数型容量大
char和short可以表示的种类数量相同,但是char可以取更大的正整数
3、大容量向小容量转换,叫做强制类型转换,需要加强制类型转换符,运行阶段可能会损失精度,谨慎使用
4、当整数字面值没有超过byte、short、char类型的取值范围,这个字面值可以直接赋值给byte、short、char类型的变量。
5、byte、short、char混合运算的时候,各自先转换成int类型在做运算。
6、多种数据类型混合运算,先转换成容量最大的那种类型再做运算。