一、JAVA的数据类型(8种基本数据类型和3种引用数据类型)
1.bit就是位,也叫比特位,是计算机表示数据最小的单位
2.byte就是字节
3.1byte=8bit ,0001 1100,一般用两个16进制来显示
4.1byte就是1B
1、八种基本数据类型类型
byte:8位,
short:16位
int:32位
long:64位
float:32位 单精度类型,尾数可以精确到7位
double:64位 双精度类型,是float的两倍
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
如果进行不产生舍入误差的精确数字计算,要使用BigDecimal类(之前工作的时候用到过,有时间再复习一下)
这是基本数据类型的取值范围,当超过改数据类型的取值范围的时候,会自动向上转型。
(1)但是问题来了,我非要把一个超出超出byte类型的值转换成byte,那结果会是怎么样的呢
举个栗子 byte b = (byte)129;
神奇的事情就发生了,如果想知道具体为什么会出现这么一个奇怪的数字,就要掌握原码、反码、补码的知识,对于这个部分的知识,我承认我曾经记得过,就去看了看参考了一下别人的解释,果然就清晰了不少→这是大佬的解释,已经很清晰了
2、基本数据类型和封装类
这里面主要是要说的是拆箱和装箱操作,看起来简单,但是其中有很多需要注意的地方。
第一点
Integer a = 1;
Integer b = 1;
Integer c = 130;
Integer d = 130;
System.out.println(a==b);
System.out.println(c==d);
输出结果是第一个是true第二个是false
主要原因是Integer类会把-128~127之前的值放到一个缓存里面,不在这个范围的值才会new一个Integer对象,这样做可以减少对象创建次数和节省内存
注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
Double、Float的valueOf方法的实现是类似的。
第二点
Integer i = 1;
Integer b = 3;
System.out.println((i+2).equals(b));
像这种写法其实是有问题的,当参与基本运算之后会自动拆箱,把 i+2 的结果转换成int类型
int.equals就会报错
3、3种引用数据类型(类,接口,数组)
这三种引用类型可能比较花时间,等看完了总结一下
还是要多看源码。