1.基本概念:
数据类型分为两大类,第一类:基本数据类型,第二类:引用数据类型,基本数据类型包括四小类:整型、浮点型、字节型和布尔型, 引用数据类型包括三小类,第一:类、第二:接口、第三:数组,
整型基本数据类型又分为四个小类:整型的四个小类根据它们存储的数据的大小和内存当中占据的多少位,
以此从小往大分为:byte类型、short类型、int类型、long类型,java之所以把整型分为4个小类,其主要目的是为了节约内存开销,
你想要用什么类型,对号入座,既然是为了节约内存、对号入座那么他们各自的存储范围是多少呢?我们可以从4个基本数据类型的包装类当中了解
比如说MAX_VALUE、MIN_VALUE。
浮点型分为单精度浮点型和双精度浮点型,首先它们在内存里占据的位数不一样,其次他们保留的小数点后面的长度不一样。
字节型包括char型,布尔型包括boolean型
2.深度拓展:
因为我们每种整型的基本数据类型有存储的极限值,于是就会导致我们如果使用不当就会造成数据溢出。比如byte只能存127
假设我一定要存一个128这么办,第一它报错,第二我可以进行强转。但是它强转出来的结果是一个负数。
浮点型float和double,默认带小数点的数是double,这就会导致我们不小心做混合类型的比较的时候出现会不可控的情况,比如float 3.14不等于double3.14
可以float的0.5和double的0.5比较的结果是一个true,其他的数据比较是一个false,
有一个问题就是short s=1,s=s+1;会报错,所以我们在进行基本数据类型表达式运算的时候,要注意,java中对于正整数默认是int,java会将表达式当中的s转换为int再相加,这么证明,我们可以jvm的指令集中得到证明。
既然每一个基本类型有包装类,比如大写的Short等于127和等于129是不一样的,为什么不一样,因为我们可以查询源码得到
当一个包装类型Short在范围-128-127之间,它视同为基本数据类型,我们可以从源码中valueOf()看到
每一个包装类都维护了一个内部类,内部类中有一个缓存数组,这样设计的目的是为了节约内存。因为它认为-128到127是你使用频率很高的
于是可以不用new,直接给你一个基本数据类型,反之超过了127,就会new。
3.项目运用:
第一:在项目当中为了规避精度不精准的情况,避免使用float和double,而使用BigDecimal
第二:每一种基本数据类型都一个极限值,所以当我们在进行循环的时候要特别小心不然会陷入一个死循环
第三:项目中尽量不用byte、short,当你有比较多的运算的时候,尽量用int,可以避免类型转换
4.项目异常:
* Exception in thread "main" java.util.InputMismatchException: Value out of range. Value:"129" Radix:10
*/输入不匹配异常
private static void fun15() {
byte d=2;
System.out.println(d);
Scanner scan=new Scanner(System.in);
d=scan.nextByte();
System.out.println(d);
}