数据类型、常量与变量
- 一、数据类型
- 1. 基本数据类型:
- 2. 引用数据类型:
- 二、常量
- 常量的分类:
- 三、变量
- 1. 变量的创建方式
- 2. 局部变量与成员变量的区别
- 三、强制类型转换
- 1. 强制类型转换的格式
- 2. 强制类型转换的几点注意:
- 3. 表达式赋值
一、数据类型
Java中有两种数据类型:基本数据类型和引用数据类型
1. 基本数据类型:
- 整数型:byte[1字节],short[2字节],int[4字节],long[8字节]
- 浮点型:float[4字节],double[8字节]
- 字符型:char[2字节]
- 布尔型:boolean[1字节]
TIPS:
- 1字节包含8个二进制位
- 字符串不是基本数据类型,而是引用数据类型
- 浮点型可能只是一个近似值,并非精确值
- 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节
- Java中,整数默认是int类型,浮点数默认是double类型
2. 引用数据类型:
字符串(String)、数组(Array)、类(Class)、接口(Interface)、Lambda等除去基本数据类型以外的全部数据类型
二、常量
程序运行期间,固定不变的量称为常量
常量的分类:
- 字符串常量:凡是用双引号引起来的部分,叫做字符串常量。例如:“abc”,“Hello”,“123”
- 整数常量:直接写上的数字,没有小数点。例如:100,200,0,-240
- 浮点数常量:直接写上的数字,有小数点。例如:2.5,3.14,0.0
- 字符常量:凡是用单引号引来的单个字符,叫做字符常量。例如:‘A’,‘b’,‘9’,‘中’
- 布尔常量:表示正反概念的两种取值。true,false
- 空常量:null。一块固定的内存地址,代表没有任何数据
三、变量
程序运行中内容可以变化的量称为变量。Java中,变量分为局部变量与成员变量
1. 变量的创建方式
// 第一种:先声明数据类型,再赋值
[数据类型] [变量名称];
[变量名称] = [数据值];
// 第二种:声明数据类型的同时赋值
[数据类型] [变量名称] = [数据值]
2. 局部变量与成员变量的区别
- 定义位置
局部变量:在方法内部
成员变量:在方法外部,直接写在类中 - 作用范围
局部变量:只适用于方法内部
成员变量:整个类内都可以使用 - 默认值不一样
局部变量:没有默认值,如果想要使用,必须手动赋值
成员变量:有默认值,规则参考不同类型数组内元素的初始化 - 在内存中的位置
局部变量:位于栈内存
成员变量:位于堆内存 - 生命周期
局部变量:随着方法压栈而诞生,随着方法弹栈而消失
成员变量:随着对象创建而诞生,随着对象被GC回收而消失
三、强制类型转换
1. 强制类型转换的格式
[范围小的类型] 范围小的变量名 = (范围小的类型) 原本范围大的数据;
2. 强制类型转换的几点注意:
- 强制类型转换一般不推荐使用,有可能发生精度损失、数据溢出。
- byte/short/char这三种数据类型都可以进行数学运算,例如加法“+”。
- byte/short/char这三种类型在运算的时候,都会被先提升成为int类型,然后再计算。
- boolean类型不能发生数据类型转换。
另外,对于byte/short/char三种数据类型的赋值操作:
- 如果右侧赋值没有超过左侧范围,那么编译器将自动补充强制类型转换语法(byte)/(short)/(char)
- 如果右侧赋值超过左侧范围,那么编译器会报错
3. 表达式赋值
在给表达式进行赋值时,如果右侧表达式中全是常量,那么编译器会直接将若干常量表达式直接计算结果。例如
short result = 5 + 8;
等号右边全是常量,没有变量参与运算,编译后得到的.class字节码文件中直接就是:
short result = 13; // 右侧的常量结果没有超过左侧范围,所以正确。
这成为编译器的常量优化。注意:一旦表达式中有变量参与,那么就不能进行这种优化了。