学习总结:
链接:【Java基础、springboot、springcloud、docker 等,学习目录】
java中数据类型分为基本数据类型和引用数据类型。
基本数据类型:
四类八种。
整数类型 | 解释 | 取值范围 | 默认值 |
---|---|---|---|
byte | Java中最小的数据类型,内存中占8位(bit),即1个字节 | -128~127 (27 - 1) | 0 |
short | 短整型,16位,2字节 | -32768~32717 | 0 |
int | 整型,32位,4字节 | -2147483648~2147483647 | 0 |
long | 长整型,64位,8字节 | -263 ~ 263 - 1 | 0L |
浮点类型 | 解释 | 默认值 | 备注 |
---|---|---|---|
float | 浮点型,32位,4字节, | 0.0f | 存储带小数点的数字 |
double | 双精度浮点型,64位,8字节 | 0.0d | 浮点数的默认类型为double类型 |
布尔类型 | 解释 | 默认值 | 备注 |
---|---|---|---|
boolean | 布尔类型,1字节 | false | 仅有两值:true、false |
字符类型 | 解释 | 取值 | 默认值 | 备注 |
---|---|---|---|---|
char | char类型是一个单一的 16 位 Unicode 字符,2字节 | 0~65535,最小值是 \u0000(即为0),最大值是 \uffff(即为65,535) | \u0000 | 必须使用‘’括起来 |
注意:
- 一个字节等于8位 1byte = 8bit。
- char占用的是2个字节 16位。
- 1111 1111 = 255,但是对于计算机,一个二进制的数的最高位是符号位,0表示正数,1表示负数。1111 1111 = -127、0111 1111 = 127 = 27 - 1。
- 一个Byte能表达的数字范围是[-128,127],那么这个-128是怎么来的呢?涉及到原码、补码、反码的知识。参看【https://blog.csdn.net/qq_39867744/article/details/88102555】
引用数据类型:
三种:类、数组、接口。默认都为null。
注意(仔细读):
int i = 0;
User user = new User();
1、在函数中定义的基本数据类型变量(i)和引用数据类型变量(user)都是在栈内存中分配的。当定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间。
2、堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由jvm垃圾回收器来管理。
3、在堆中产生了一个数组或者对象后(new User();),还可以在栈中定义一个特殊的变量(user),这个变量的值等于数组或者对象在堆内存中的地址,在栈中的这个特殊的变量(user)就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名。
4、引用类型变量是普通变量(user),定义时在栈中分配内存,引用变量在程序运行到作用域外释放。但数组和对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!