本节主要掌握 Java 之中,int+float和long+double数据类型和数据的对应范围。
首先上表,给出数据类型及其对应的数据字节数目和数据范围序列表,详细如下。
数据类型 | 字节数目 | 数据范围 |
byte | 1个字节 | -128~127 |
short | 2个字节 | -2^16~2^16-1 |
int | 4个字节 | -2^31~2^31-1 |
long | 8个字节 | -2^31~2^31-1 |
float | 4个字节 | -3.4*10^38~3.4*10^38-1 |
double | 8个字节 | -1.7977*10^308~1.7977*10^308 |
char | 1个字节 | 0~65536 |
boolean | 1或者4字节 | false/true |
Java 默认整数运算的结果为整数,byte 和 short 类型变量在计算的时候,被计算机识别为 32 位(int)整型变量。
byte num = 3;
// byte val = 3+num; // 报错
Java 默认浮点数运算的结果 计算机默认为 double 类型
long a=9;
float b = 9.2f;
float c = b+a;
double d = b+a;
数据类型 | 符号位 | 指数位 | 尾数位 |
float | 1 | 23 | 8 |
double | 1 | 52 | 11 |
Java 中有寄存器,栈空间,堆空间,三种空间。前者Java不可直接对其处理,后两者Java可直接对其进行操作。
一 栈空间
- 存取效率高;
- 先进先出;
- 空间较小,不可存放大量数据;
- JVM 将基本类型数据存放在栈空间。
二 堆空间
- 存取效率低;
- 数据存放位置随机分配;
- 空间较大,可存放大规模数据。
三 变量管理与引用类型的数据
栈空间:
变量名:Score
数据地址:0xaa00
堆空间:
数组地址:0xaa00
95、98、85
java不允许直接访问内存,所以没法查看变量的内存地址。
java并不是编译成机器码,是一种伪代码,所以变量值是被编译成一个索引,并不像C直接编译成一个相对内存地址
另,在C里面,char c = (char)a;也不能实现c读出0x0102,c也只是0x01,要用char指针指向a的地址才可以,如
char *c = (char*)(&a);