0
点赞
收藏
分享

微信扫一扫

java的8种基本数据类型总结



java中只有8种基本数据类型,除了这8种,其余的都是引用类型。


分类:


第一类:逻辑型 boolean


第二类: 整型 byte short int long


第三类:字符型 char


第四类:浮点型 float double


基本数据类型在栈中可以直接分配内存,引用类型是数据的引用在栈中,但是它的对象在堆中。


占用字节:


boolean: 1/8(即1位)


byte: 1


char: 2


shot: 2


int: 4


float: 4


double: 8


long:8


java中默认的整数是int型,要想定义为long型,要在数值后加l或L; 默认的浮点型是double,要想定义为float,要在数值后加f或F。


基本数据类型自动转换时,小可转大,大转小需要强转,会失去r精度。


基本数据类型与包装器类的区别:


包装器类继承Object, 可以重写equals,hashcode等Object里的方法;可以为null; 包装器类的对象存在堆中,引用存放在栈中, 基本数据类型只存放在栈中。


浮点型(double float)不能表示精确的值,如货币


double类型是8个字节,有效位15位。其中52小数,11位偏指数,1位符号。其中1.1是没有办法用二进制精确表示的。1.1的二进制大约就是这样1.0001100110011001


一直是小数部分一直是1001所以,只能取一个52精度的数近似代替1.1.因此,最终结果肯定会有误差。


同理,任意一个整数都是可以使用二进制精确表示,所以只要不超过精度总可以精确表示,但是小数往往不能使用二进制精确表示。


因此,java引入了一个对象BigDecimal


BigDecimal b1 = new BigDecimal("2.0");


BigDecimal b2 = new BigDecimal("1.1"); 


System.out.println(b1.subtract(b2));


这样就可以得到精确的0.9.


tips:构造BigDecimal对象使用浮点数只能使用字符串,如果直接使用浮点数,依然会丢失精度。所以需要高精度的浮点数计算时, 数据库 中最好直接定义为varchar型,以免转换。


举报

相关推荐

0 条评论