Java基础003 --- 原始数据类型

基本数据类型

boolean、byte、char、short、int、long、float、double及其包装类型Boolean、Byte、Character、Short、Integer、Long、Float、Double

整形包装类型比较

Integer比较时,取值范围在-128~127时,使用==能够比较出结果(虽然不建议);但是超过了这个范围,使用==比较就不能正确比较了;

原因:范围在-128~127时,Integer对象会从内部类IntegerCache中获取,超过范围会从Heap中获取;因为对于对象来说比较时比较的是地址;

类似的包装类型及从cache取值范围如下:

Character Short Integer Long
0~127 -128~127 -128~127 -128~127

 

 

 

源码:

System.out.println("==========================Character========================");
Character character1 = 127;
Character character2 = 127;
Character character3 = 0;
Character character4 = 0;
Character character5 = 128;
Character character6 = 128;
System.out.println(character1 == character2);
System.out.println(character3 == character4);
System.out.println(character5 == character6);
System.out.println(character5.equals(character6));

System.out.println("==========================Short========================");
System.out.println(Short.valueOf((short) -128) == Short.valueOf((short) -128));
System.out.println(Short.valueOf((short) 127) == Short.valueOf((short) 127));
System.out.println(Short.valueOf((short) 128) == Short.valueOf((short) 128));
System.out.println(Short.valueOf((short) -129) == Short.valueOf((short) -129));
Short short1 = -129;
Short short2 = -129;
System.out.println(short1.equals(short2));

System.out.println("==========================Integer========================");
System.out.println(Integer.valueOf(-128) == Integer.valueOf(-128));
System.out.println(Integer.valueOf(127) == Integer.valueOf(127));
System.out.println(Integer.valueOf(128) == Integer.valueOf(128));
System.out.println(Integer.valueOf(-129) == Integer.valueOf(-129));
Integer integer1 = -129;
Integer integer2 = -129;
System.out.println(integer1.equals(integer2));

System.out.println("==========================Long========================");
System.out.println(Long.valueOf(-128) == Long.valueOf(-128));
System.out.println(Long.valueOf(127) == Long.valueOf(127));
System.out.println(Long.valueOf(128) == Long.valueOf(128));
System.out.println(Long.valueOf(-129) == Long.valueOf(-129));
Long long1 = -129L;
Long long2 = -129L;
System.out.println(long1.equals(long2));

运行结果:

==========================Character========================
true
true
false
true
==========================Short========================
true
true
false
false
true
==========================Integer========================
true
true
false
false
true
==========================Long========================
true
true
false
false
true

浮点类型

float:精度为8位,超过8位丢弃;定义float变量时后面要指定f,例如:float f1 = 1.34f;

double:精度为17位,超过17位丢弃;定义double时,可以不指定d

源码:

System.out.println("==========================Float========================");
float f1 = 1.123456789f;
System.out.println(f1);

System.out.println("==========================Double========================");
double d1 = 1.123456789012345678;
System.out.println(d1);

运行结果:

==========================Float========================
1.1234568
==========================Double========================
1.1234567890123457

注:浮点数只能用于科学计算和商业计算,不适合数学运算;原因:计算机计算时转换为二进制,这个时候可能会失去精度导致计算结果偏差;

个人理解:只要浮点数不进行运算,那么无影响;如果进行了运算,那么得到的值可能不是预期的

浮点包装类比较

不能用==或者.equals比较,可以使用compareTo比较大小,但是不能比较是否相等;可以考虑使用BigDecimal做比较

posted @ 2020-04-21 14:53  光头用沙宣  阅读(260)  评论(0编辑  收藏  举报