8种基本类型所占字节数及取值范围分析

类型

字节数

位数

取值范围

Byte

1

8

-2的7次方到2的7次方-1

Short

2

16

-2的15次方到2的15次方-1

Int

4

32

-2的31次方到2的31次方-1

Long

8

64

-2的63次方到2的63次方-1

Float

4

32

3.402823e+38 ~ 1.401298e-45

Double

8

64

1.797693e+308~ 4.9000000e-324

char

2

16

 

boolean

1(前7位是0)

1

0/1

 

(1)整型:

其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样 
byte
的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) 
short
的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) 
int
的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 
long
的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)。

可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。 
在通常情况下,如果JAVA中出现了一个整数数字比如35,那么这个数字就是int型的,如果我们希望它是byte型的,可以在数据后加上大写的 B:35B,表示它是byte型的,同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型的,就一定要在数据后面加“L”。 

(2)浮点型:
float
和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同 
float 3.402823e+38 ~ 1.401298e-45
(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节 
double 1.797693e+308~ 4.9000000e-324
占用8个字节 
double
型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,可以在数据后面加上“F”。 
浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。 

【1】浮点型比较1:

例如:

[java] viewplain copy 

  1. System.out.println(0.1d == 0.1f);  


结果会是flase

这个例子,float首先会被升级为double,然后执行浮点数相等比较

单精度浮点数0.1表示成二进制:111101110011001100110011001101

双精度的浮点数0.1的二进制:11111110111001100110011001100110011001100110011001100110011010

Float升级后的二进制:1111111011100110011001100110011010000000000000000000000000000

因此结果为false.

【2】浮点型比较2

Java代码 

 

doubled1 = 0.1, d2 = 0.1; 

if(d1 == d2) {}// 坏代码 

if(Double.compare(d1, d2) == 0) {}// 好代码 

if(Double.doubleToLongBits(d1) == Double.doubleToLongBits(d2)) {}// 好代码 

if(Double.valueOf(d1).equals(d2)) {}// 好代码 

 

使用BigDecimal来代替double,它能让你完全控制精度,结果会非常精确,加减乘除写起来也很方便,不过他有两个缺点:1,不是基本类型,与基本类型相比,操作起来不方便;2. 速度没有基本类型快,算是用速度换精度。相比第2个缺点并不要紧,但是第一个缺点会让你写起代码很不舒服。

Java代码 

// 好代码 

Stringresult = new BigDecimal("1").subtract(newBigDecimal("0.9")) .toString();

比较喜欢这个,而且BigDecimal还支持常用的格式化方法,如

BigDecimalnum = new BigDecimal("384400000");

Stringstr = new DecimalFormat("地球和月球的距离:#,##,###,###米").format(num);

结果:地球和月球的距离:384,400,000

 

(3)boolean型(布尔型): 
这个类型只有两个值,true和false(真和非真) 
boolean t = true
; 
boolean f = false

(4)char型(文本型) 
用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容 
字符的存储范围在\u0000~\uFFFF,在定义字符型的数据时候要注意加' ',比如 '1'表示字符'1'而不是数值1, 
char c = ' 1 '; 

我们试着输出c看看,System.out.println(c);结果就是1,而如果我们这样输出呢System.out.println(c+0); 
结果却变成了49。 

发布了74 篇原创文章 · 获赞 86 · 访问量 15万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览