概述
背景
作为科班出身,又写了几年的Java,被一个老弟的一个问题难住了,问: 1/10.0的小数为什么不能用二进制完整表示?
思考了很久,发现自己已经把最基本的东西忘记了,这里回顾一下,最后再回答这个问题。
8种基础类型
首先占用空间的大小从小到大来介绍一下java的8种基础类型。
类型 | 类型说明 | 默认值 | 取值范围 | 占用空间(位数) | 举例说明 |
---|---|---|---|---|---|
byte | 字节 | 0 | -2^7 - 2^7-1 | 8 | byte b = 10; |
boolean | 布尔型 | false | false, true | 未知(虚拟机规范是4字节,也可能是1字节) | boolean b = false; |
char | 字符 | 空 | 0 - 2^16-1 | 16 | char c = ‘a’; |
short | 短整数 | 0 | -2^15 - 2^15-1 | 16 | short s = 1; |
int | 整数 | 0 | -2^31 - 2^31-1 | 32 | int i = 12; |
float | 单精度小数 | 0.0 | 1.4e-45f - 3.4028235e+38f | 32 | float f = 12.0F; |
long | 长整数 | 0 | -2^63 - 2^63-1 | 64 | long l = 12L; |
double | 双精度小数 | 0.0 | 4.9e-324 - 1.7976931348623157e+308 | 64 | double d = 12.0; |
写一段代码验证一个表格里的说明。
public class BasicData {
static byte b;
static short s;
static int i;
static long l;
static float f;
static double d;
static char c;
static boolean bo;
public static void main(String[] args) {
System.out.println("byte的大小:" + Byte.SIZE
+ ";默认值:" + b
+ ";数据范围:" + Byte.MIN_VALUE + " - " + Byte.MAX_VALUE);
System.out.println("boolean的大小:未知;默认值:" + bo
+ ";数据范围:" + Boolean.FALSE + " - " + Boolean.TRUE);
System.out.println("char的大小:" + Character.SIZE
+ ";默认值:" + c
+ ";数据范围:" + Character.MIN_VALUE + " - " + Character.MAX_VALUE);
System.out.println("short的大小:" + Short.SIZE
+ ";默认值:" + s
+ ";数据范围:" + Short.MIN_VALUE + " - " + Short.MAX_VALUE);
System.out.println("int的大小:" + Integer.SIZE
+ ";默认值:" + i
+ ";数据范围:" + Integer.MIN_VALUE + " - " + Integer.MAX_VALUE);
System.out.println("float的大小:" + Float.SIZE
+ ";默认值:" + f
+ ";数据范围:" + Float.MIN_VALUE + " - " + Float.MAX_VALUE);
System.out.println("long的大小:" + Long.SIZE
+ ";默认值:" + l
+ ";数据范围:" + Long.MIN_VALUE + " - " + Long.MAX_VALUE);
System.out.println("double的大小:" + Double.SIZE
+ ";默认值:" + d
+ ";数据范围:" + Double.MIN_VALUE + " - " + Double.MAX_VALUE);
System.out.println(-2 % 12);
}
输出的结果:
byte的大小:8;默认值:0;数据范围:-128 - 127
boolean的大小:未知;默认值:false;数据范围:false - true
char的大小:16;默认值:;数据范围: -
short的大小:16;默认值:0;数据范围:-32768 - 32767
int的大小:32;默认值:0;数据范围:-2147483648 - 2147483647
float的大小:32;默认值:0.0;数据范围:1.4E-45 - 3.4028235E38
long的大小:64;默认值:0;数据范围:-9223372036854775808 - 9223372036854775807
double的大小:64;默认值:0.0;数据范围:4.9E-324 - 1.7976931348623157E308
下面分别介绍一下每个数据类型在内存中的存储方式,在介绍之前先温习一下什么是补码原码反码,具体可以看这个博客:
https://www.cnblogs.com/wqbin/p/11142873.html
下面的标识都是以补码的形式表示,因为内存中也是补码。
byte
举个例子
10进制: 8
二进制: 00001000
最大值
十进制: 127
二进制: 01111111
最小值
十进制: -128
二进制: 111111111
最后
以上就是漂亮小海豚为你收集整理的Java中8个基础类型以及其存储背景8种基础类型的全部内容,希望文章能够帮你解决Java中8个基础类型以及其存储背景8种基础类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复