数据类型
- 数据类型
- 基本数据类型
- 整形
- 浮点
- 字符型
- 布尔类
- 字节
- 引用数据类型
- 类型转换
- 显式转换
- 隐式转换
- 注意事项
- 整型提升
作为学习Java的入门知识,在刚开始面试的几场,表现不太好的时候,就有几个面试官会问这个问题,估计此时此刻我在他们的心目中也就是这个问题的层次了吧…当然,当时由于紧张,有几个还没说出来0.0
数据类型
基本数据类型
我们总共有八大基本数据类型,按照下面的逻辑来记忆基本就不会遗漏了
整形
byte short int long
浮点
float double
字符型
char
布尔类
boolean
1.不论是在16位系统还是32位系统,每个数据类型所占用的字节大小都是固定的
2.整形和浮点型都是带有符号的,写成二进制的格式的话,第一位就是符号位
3.整型默认为int型,浮点型默认为double
字节
字节是计算机中表示空间大小的基本单位.
一字节==八比特
我们平时的计算机为 8GB 内存, 意思是 8G 个字节.
其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.
所以 8GB 相当于 80 多亿个字节
这里的估算是有小技巧的,我们只需要认为三个零就往前进一位即可.
引用数据类型
在Java的世界里,没有办法像C语言那样拿到地址这么底层的东西,但是我们使用引用这个类似地址的概念加以使用.
八大基本数据类型对应的包装来,后面要学习的字符串,数组,枚举…这些都要应用到引用!
类型转换
有些时候我们需要实现数据类型之间的切换,Java中就给出了一套规则
显式转换
int a = 10;
double b = 20;
a = (int) b;
显式类型转换也可以叫做强制类型转换,我们加上了一个(类型)来实现了大赋值给小这样的一个危险操作.
Java是一个强安全的语言,当我们不做处理地想把八个字节的浮点类型赋值给4个字节的int类型时,就会有这样的报错提示.
隐式转换
隐式转换就是不加以()进行强制类型转换:
int a = 10;
double b = 20;
b = (double) a;
像我们之后学习到包装类的装包拆箱的时候,要知道这不过就是换了个皮肤,本质还是类型转换.
Integer A = 10;
a = A;
注意事项
-
不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型,
因为大杯的水往小杯里面灌,总会有溢出来的,这就会造成数据的缺失! -
如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
要知道在Java里面1.1*1.1可不是简简单单的1.21哦:
我们在C语言里面学过,其实我们是没有办法精确表示一个小数的,只能够无限逼近,在Java中也是这个道理! -
将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
如果我们要赋的这个值超过了我们给的数据类型,连编译都不会给你通过:
-
强制类型转换不一定能成功,不相干的类型不能互相转换:
就比如布尔类型就不能和别的类型进行任何运算.
整型提升
- 不同类型的数据混合运算, 范围小的会提升成范围大的.
当然了,如果我们给的是byte = 1;这样的语句是没有关系的,因为还没有超过byte的最大值! - 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.