- bit——位(比特)数据传输的单位,是计算机存储设备的最小单位,每一位的状态只能是0或者1;
以下是java 中8大基本数据类型:
- byte——字节,是指一小组相邻的二进制数码。通常是8位作为一个字节;字节是处理数据的基本单位;
- char——字符
- int——整型
- short——短整型
- long——长整型
- float——单经度型
- double——双经度型
- boolean——波尔型
基本数据结构内存情况:
类型名称 | 占位(bit) | 字节(byte) | 存储数据范围 | 默认值 |
---|---|---|---|---|
byte | 8 | 1 | -128~127 | 0 |
int | 32 | 4 | 10位数(-2,147,483,648~2,147,483,647) | 0 |
short | 16 | 2 | 5位数(-32768~32767) | 0 |
long | 64 | 8 | - | 0L |
float | 32 | 4 | - | 0.0f |
double | 64 | 8 | - | 0.0d |
char | 16 | 2 | - | 'u0000' |
bolean | ~ | ~ | ~ | false |
注:boolean
实际上,Java中还存在另外一种基本类型void
,它也有对应的包装类 java.lang.Void
,不过我们无法直接对它们进行操作。
常见问题及原理
Q1、为什么byte存储范围是-128~127
理解:真码,原码,反码,补码等存在的意义。
参考:https://blog.csdn.net/qq_23418393/article/details/57421688
Q2、基本类型做运算结果超出最大值现象
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
int k = a + b;
System.out.println("a="+a+";b="+b+";k="+ k);
运行结果:
a=2147483647;b=2147483647;k=-2
k的结果值理论上已经超出int最大取值,然而程序并不会报异常,所以在业务场景使用时候考虑好值的返回。否则获取不到预期的值。
Q3、为什么不用浮点数来表示金钱数值
A: 计算机中保存的小数其实是十进制的小数的近似值,并不是准确值。建议使用bigdecimal 或者转换为分为单位的Integer(Long)类型处理金钱。
**Q4、byte与int转换
//1、整型常量在byte范围内
byte a=100;
System.out.println(a);
//2、整型常量不在byte范围内,需要强转
// byte b=130;// 错误(从int转换到byte可能会有损失)
byte b=(byte)130; //强转为byte
System.out.println(b); //-126
byte c=(byte)300;
System.out.println(c); // 44 取的是300的低8位即44
//整型变量--》需要强转
int num=12;
//byte d=num; //错误(从int转换到byte可能会有损失)
byte d=(byte)num;
System.out.println(d); //12
- 整型常量若在byte类型的保存范围内,可以直接赋给byte变量,不用强转;
- 整型常量若不在byte类型的保存范围内,必须强转;
- 整型变量无论值是否在byte范围内,都需要强转;
网友评论