一、单个基本类型占用bit(位)数
二、数据类型比较(包装类型地址比较)
这篇讲解Long缓存池的很有意思
https://www.jb51.net/article/146878.htm
/**
* @ClassName IVTest
* @Description TODO
* @Author ljh
* @Date 2020/10/510:06
* @Version 1.0
*/
public class IVTest {
public static void main(String[] args){
//八种基本数据类型测试包装后,进行地址比较("==" 比较)测试,
//Interger Double Float Short Long Character Byt//八种基本类型取值范围
//https://blog.csdn.net/qq_25800311/article/details/82945852
//Boolean 无法测试,不同包装类型之间不能进行地址比较
//byte short char 进行计算的时候会转换成int
//如果是包装类型是不是拆箱然后转换成int?
//实例化生成的是不同的对象,地址自然是不同的。
// Integer i = new Integer(1000);
// Integer j = new Integer(1000);
// Integer 的缓存池范围是-128----127,
//超过以后进行地址比较是不同的地址,上限可以修改。
// Integer j = 1000;
// Integer i = 1000;
//Byte类型和Integer类型一致,因为byte的取值范围是-128----127,
//所以byte是所有值都在缓存池。
// byte类型到128 竟然不能这样定义了???
// !!!忘了取值范围,128超过范围了。
//下面的博客是解决溢出的问题,之前试过int的溢出,
//今天看到了byte觉得简单一些。
//https://blog.csdn.net/benjamin_whx/article/details/38704077
// Byte j = 127;
// Byte i = 127;
//Character类型和Integer类型一致
// Character j = 127;
// Character i = 127;
//Short类型和Integer类型一致,
//SHORT的取值范围-32768~32767,SHORT长度16
// Short j = 127;
// Short i = 127;
//Long 类型的默认缓存池和Integer一致
Long j = 127L;
Long i = 127L;
//Double 进行地址比较都是false
// Double j = 1.0;
// Double i = 1.0;
// Float 进行地址比较都是false
// Float j = 1f;
// Float i = 1f;
//基本数据类型,值比较相等。
// int i = 1000;
// int j = 1000;
// byte i = 10;
// byte j = 10;
//总结规律 整型和Integer类型一致,浮点类型没有缓存池。注意取值范围即可
System.out.println("j="+j);
System.out.println("i="+i);
System.out.println(i==j);
//基本类型不能进行对象比较
System.out.println(i.equals(j));
}
}
三、装箱拆箱
装箱 Integer.valueof();
拆箱 x.intValue();
四、基本数据类型和包装类型进行地址比较
基本类型和包装类型进行比较不会发生对象变化可以一直相等,无论是地址还是值
五、关于补码,反码,原码
而java中的二进制都是采用补码形式存储:
⑴一个数为正,则它的原码、反码、补码相同
⑵一个数为负,则符号位为1,其余各位是对原码取反,然后整个数加1
六、关于溢出的问题
byte 128 会输出为-128
int -2147483648 -1 =2147483647
int 2147483647 +1 =-2147483648
所以int类型原理相同 ,不想思考啦,就这样吧