1.java有哪些基本数据类型
2.为什么要有这么多数据类型?
计算机的内存空间有限,所以在使用数据类型中要量入为出
类型 大小 示例 取值范围 boolean 1字节,8位 true true false \byte 1字节,8位有符号数 -100 -128~+127 short 2字节,16位有符号数 100 -32768~+32767 int 4字节,32位有符号数 150 -2147483648~+2147483647 long 8字节,64位有符号数 10000 -2*63~+ 2 *63-1 char 2字节,16位unicode字符 'a' 0~65535 float 4字节,32位有符号数 3.14f -3.4E38~3.4E38 double 8字节,64位有符号数 2.4e3d -1.7E308~1.7E308
3.为什么float4个字节比long8个字节所表示的数值范围还大?
long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。
而float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:
V=(-1)^s * M * 2^E
浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。
其中第1位,符号位,即S。接下来的8位,指数域,即E。剩下的23位,小数域,即M,M的取值范围为[1,2)或[0,1)。
也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大。
4.字符类型(char)
-
char占两个字节
-
只能存贮一个字符
-
可以是中文,也可以用数字赋值
-
和String的区别,String用双引号,char用单引号
5.布尔类型
-
TRUE
-
FALSE
6.数据类型转换
7种数据类型直接可以互转,Boolean是无法直接和其他基本数据类型互转
-
默认转换
赋值操作:小的数据类型可以默认转换为大的(float比long大,这里的大小就是表示范围,而不是占用空间)
public class DataTypeDemo1{ public static void main(String[] args){ byte byte1=1; short short1=byte1; System.out.println(short1); } }
运算(小转大,小的数据类型会向大数据类型转换,然后进行计算。)
(特例,见串得串,即和字符串连接会转化为字符串)
byte byte2=int1+byte1;//错误 int int2=int1+byte1;//正确 //因为int比byte大
默认(自动)提升(比int小的数据类型(byte,short,char),在运算过程中,会转化成int,再进行运算。)
byte byte3=(byte)(byte1+bytr2);
-
强制转换
大的数据类型转换为小的数据类型需要强制转换,但是有可能会损失精度。
public class DataTypeDemo2{ public static void main(String[] args){ short short1=1; byte byte1=(byte)short1;//括号,强转运算 System.out.println(short1); } }
常量
常量可理解为立即量,编译过程中就能确实的值。
-
分类:
int 1234 默认整数 long 12345678901L 大小写L都行 double 3.14 默认小数 float 3.14F 大小写F都行 String "字符串常量" boolean true/false Objet null 标识没有对象 -
根据合理的场景选择数据类型
1 标识人类年龄 int 2 商品的价格(分) int/long 3 泰国人的性别(强调的值域有扩展的可能 char/byte/int/boolean 合理选择数据类型
-
使用场景,用户需求(例如第一问,是成年人,还是不满一岁的幼儿)
-
合理的值域
-
操作的方便性,资源稀缺性
-