Java 基础|变量、数据类型、类型转换、表达式与运算符
一、变量
(1)概念
变量是计算机内存中的一块空间,是程序中存储数据的基本单元。
(2)变量的组成部分
- 数据类型:决定变量在内存中的空间大小
- 变量名:用于访问变量对应的内存空间
- 数据:变量里面存储的实际值
(3)变量的定义
- 声明:
数据类型 变量名;
int a;- 赋值:
变量名 = 数据;
a = 5;(4)变量其他定义方式
- 声明同时赋值
数据类型 变量名 = 数据;- 同时定义多个同类型变量
数据类型 变量名1,变量名2,变量3=值,变量4;二、数据类型
存储单位换算 位 (bit /b),字节 (Byte / B) 1B = 8b 1KB=1024B、1MB=1024KB、1GB=1024MB、1TB=1024GB
Java 数据类型分为两大类:基本数据类型、引用数据类型
1. 基本数据类型(原始数据类型,共 8 种)
(1) 整数类型
表格
| 类型 | 字节 | 取值范围 | 注意事项 |
|---|---|---|---|
| byte | 1B | -128 ~ 127 | |
| short | 2B | -32768 ~ 32767 | |
| int | 4B | -2147483648 ~ 2147483647 | 整数默认字面值为 int |
| long | 8B | -9223372036854775808 ~ 9223372036854775807 | long 字面值末尾建议加大写L,区分数字 1 |
字面值:程序中直接书写出来的数据。 Java 是强类型语言。
(2) 小数(浮点)类型
表格
| 类型 | 字节 | 说明 | 注意事项 |
|---|---|---|---|
| float | 4B | 单精度 | 字面值后面必须加F/f |
| double | 8B | 双精度 | 字面值 D/d 可省略,开发中优先使用 double |
float、double 使用科学计数法,是近似存储,非精确存储。
📌面试题:8 字节 long 和 4 字节 float 哪个存储的数据范围更大? 答案:float 范围更大,底层采用科学计数法存储。
(3) 字符类型 char
- 占用:2 字节,基于 Unicode(万国码)编码
- 三种字面值写法
//① 单引号包裹单个字符【开发重点】 char c1 = 'A'; //② 直接写整数,对应Unicode编码值 char c2 = 65; //代表字符 'A' //③ 十六进制unicode形式【了解】 char c3 = '\u0041'; //代表字符 'A'转义字符\,改变原有字符含义
\' //单引号 \" //双引号 \n //换行 \t //Tab缩进 \\ //反斜杠(4) 布尔类型 boolean
- 只有两个字面值:
true、false - ⚠️区别 C 语言,Java 不允许使用 0/1 表示真假。
2. 引用数据类型(对象类型)
包含:数组、类、接口等。
String字符串属于引用数据类型
- 字面值使用双引号包裹,可以是一个或多个字符
String str = "ada";📌开发小案例:个人信息对应数据类型
表格
| 信息 | 推荐数据类型 |
|---|---|
| 姓名 | String |
| 年龄 | int |
| 成绩 | double |
| 性别 | char / String |
| 地址 | String |
| 电话号码 | String(避免开头 0 丢失) |
| 身份证号 | String(存在字母 X) |
三、数据类型提升
1. 自动类型提升
条件:类型互相兼容;小范围类型赋值给大范围类型,自动转换
提升顺序:
byte --> short --> int --> long --> float --> double char --> int --> long --> float --> double2. 强制类型转换
条件:类型互相兼容;大范围类型赋值给小范围类型,需要手动强转
语法:
目标类型 变量名 = (目标类型) 源变量;特点:
- 小数强制转整数:直接截断小数部分,只保留整数
- 大数据数值落在小类型范围内,数据可以完整保存
- ❗boolean 不能参与任何类型转换,强制转换也不行
四、表达式
- 概念:由变量、字面值、运算符组成的式子,运算之后会产生一个结果。
- 表达式结果处理
- 结果只用一次:直接写在使用位置;
- 结果多次使用:存入变量保存。
表达式运算结果类型规则:
- 只要有 double 参与运算,结果就是 double
- 没有 double,有 float 参与,结果为 float
- 没有 double、float,有 long 参与,结果为 long
- 其余全部情况,结果都是
int包含:byte+byte、byte+short、short+short、byte+int、int+int
📌面试题:分析下面代码能否编译通过
byte b=1; b = b + 1;解析:编译报错。b+1运算时 byte 提升为 int,表达式结果是 int,int 不能直接赋值给 byte。
五、运算符
1. 算术运算符
+、-、*、/、%(取余 / 取模)
注意:boolean 不能参与算术运算 特殊规则:
+只要任意一端是 String,则变成字符串拼接,最终结果为字符串。
2. 赋值运算符
普通赋值:=复合赋值:+=、-=、*=、/=、%=
⚠️重点:复合赋值运算符底层自带强制类型转换,不会遵循普通自动类型提升。
📌面试题:对比两段代码
//代码1 byte b=1; b = b + 1; //编译报错,b+1结果提升为int //代码2 byte b2=1; b2 += 1; //编译通过,底层等价 b2=(byte)(b2+1)3. 一元运算符(自增自减 ++ /--)
a++:先使用原值,变量再自增 1
int a=2; int c = a++; // c=2,a=3++a:变量先自增 1,再使用新值
int a=2; int c = ++a; // a=3,c=3开发建议:多数场景只做变量自身 + 1/-1,不接收表达式返回结果。
4. 关系运算符
==、<、<=、>、>=、!=
关系运算结果一定是 boolean,成立为 true,不成立为 false,得到布尔表达式。
5. 逻辑运算符
&&短路与、||短路或&非短路与、|非短路或
逻辑运算符两边必须是布尔表达式。
&&短路与:左侧为false,右侧代码不会执行,直接整体 false&非短路与:无论左侧 true/false,左右全部执行||短路或:左侧为true,右侧不再执行|非短路或:两边全部执行
📌面试:
&&和&的区别&&短路与:左侧结果为 false,直接确定整体结果 false,右侧代码不执行;&非短路与:无论左侧结果,左右两侧表达式都会完整执行。
6. 三元(三目)运算符
语法:
布尔表达式 ? 表达式1 : 表达式2执行逻辑: 布尔表达式结果为true,执行表达式 1; 布尔表达式结果为false,执行表达式 2。
