Java基础知识2
变量与数据类型
变量
语法1:
数据类型 变量名;
变量名 = 变量值;
语法2:
数据类型 变量名 = 变量值;
// 语法1
int num1;
num1 = 10;
// 语法2
int num2 = 20;
-
命名规则:
- 开头:英文字母(大写小写)、下划线、$符号 (注意:不能数字开头)
- 其他:英文字母(大写小写)、下划线、$符号、数字
-
命名规范:驼峰命名——首字母小写,多个词除第一个词外其他首字母大写
-
注意:
- 变量声明后使用前必须初始化,否则编译不通过。
- 同一个类中变量不能重名
常量
语法:
final 类型 常量名 = 值;
final double PI = 3.14;
-
修饰符:final
-
命名规范:全部大写,多个词之间使用下划线。
-
特点:一经赋值,无法修改。
数据类型
非浮点型范围: -2bit值-1 ~ 2bit值-1 -1
float有效数字位: 6-7
double有效数字位: 15-16
数据类型 | 字节 | 范围 | 类型 | 备注 |
---|---|---|---|---|
byte | 1(8bit) | -27 ~ 27 -1 | 字节型 | - |
char | 2(16bit) | -215 ~ 215 -1 | 字符型 | - |
short | 2(16bit) | -215 ~ 215 -1 | 短整型 | - |
int | 4(32bit) | -231 ~ 231 -1 | 整型 | - |
float | 4(32bit) | -3.4E+38 和 3.4E+38 | 单精度浮点型 | - |
long | 8(64bit) | -263 ~ 263 -1 | 长整型 | - |
double | 8(64bit) | -1.7E-308~1.7E+308 | 双精度浮点型 | - |
boolean | - | true / false | 布尔型 | - |
String | - | - | 字符串类型 | 非基本数据类型 |
Date | - | - | 日期类型 | 非基本数据类型,位于util包 |
// 8种基本数据类型
byte byte_1 = 1;
char char_1 = 'a';
short short_1 = 10;
int int_1 = 100;
float float_1 = 11.3f;
double double_1 = 12.43;
long long_1 = 100000L;
boolean boolean_1 = true;
// 其他数据类型
String string_1 = "abc";
// new Date() 获取当前事件
Date date = new Date();
- 注意:String不是基本数据类型,它是一个类(java.lang.String)
数据类型转换
自动转换:
低精度向高精度转换【按照字节数由小到大,精度递增】
整型向浮点型转换【除int转double,其他都有可能损失精度】
强制转换:
高精度向低精度转换
需要在原类型前加(),内部写需要转换的类型
强制转换只保留当前精度位,多余精度直接舍弃(截断)
拓展:char向int型转换,返回的是ASCII码值
// 自动转换
int num1 = 10;
douoble num2 = num1;
// 强制转换: num4 = 4 (默认强制转换会截断小数点位)
double num3 = 10;
int num4 = (int)(num3/2.2);
数值交换
// 方法1:借助中间变量实现
int number1 = 8;
int number2 = 9;
int temp = number1;
number1 = number2;
number2 = temp;
// 方法2:不借助中间变量实现
int number3 = 3;
int number4 = 5;
number3 = number3 + number4; //8
number4 = number3 - number4; //8 - 5 = 3
number3 = number3 - number4; //8 - 3 = 5
运算符
算术运算符
运算符 | 作用 | 示例 |
---|---|---|
+ | 加法 | 1 + 1 = 2 |
- | 减法 | 1 - 1 = 0 |
* | 乘法 | 1 * 6 = 6 |
/ | 除法 | 6 / 2 = 3 |
% | 取余 | 7 % 2 = 1 |
++ | 自增 | a++ 即 a = a + 1 |
– | 自减 | a-- 即 a = a - 1 |
- 自增、自减:运算符写在变量前面,则先进行运算后复制使用,在后面则相反
- a++ 先赋值使用,再+1
- ++a 先+1,再赋值使用
- a– 先赋值使用,再-1
- –a 先-1,再赋值使用
int number1 = 6;
int number2 = 8;
// 加减乘除运算
int result1 = number1 + number2; // 6 + 8 = 14
int result2 = number2 - number1; // 8 - 6 = 2
int result3 = number1 * number2; // 8 * 6 = 48
// int型结果截断,即只取整数部分,后面的直接舍弃不进位
int result4 = number1 / number2; // 6 / 8 = 0
// 取余:计算余数
int result5 = number1 % number2; // 6 % 8 = 6
// 自增自减
int result6 = number1++; // result6 = 6 number1 = 7
int result7 = ++number1; // result7 = 8 number1 = 8
int result8 = number2--; // result8 = 8 number2 = 7
int result9 = --number2; // result9 = 6 number2 = 6
复合运算符
运算符 | 作用 |
---|---|
+= | a += 5 等效于 a = a + 5 |
-= | a -= 5 等效于 a = a - 5 |
*= | a *= 5 等效于 a = a * 5 |
/= | a /= 5 等效于 a = a / 5 |
%= | a %= 5 等效于 a = a % 5 |
- 注意: 单个运算符,当类型不匹配不能转换等价
short a = 4;
// 编译通过,符合运算符内部自动转换了
a += 5;
// 编译不通过,类型不匹配
a = a + 4;
关系运算符
运算符 | 含义 | 返回值 | 示例 | 示例结果 |
---|---|---|---|---|
== | 等于 | 布尔型 | 2 == 2 | true |
!= | 不等于 | 布尔型 | 2 != 2 | true |
< | 小于 | 布尔型 | 2 < 5 | true |
> | 大于 | 布尔型 | 2 > 5 | true |
>= | 大于等于 | 布尔型 | 2 >= 2 | true |
<= | 小于等于 | 布尔型 | 2 <= 2 | true |
- 注意:
- > < >= <= 只适用于数值类型判断
- == 只能使用在基础类型中,以及对象和 null 比较的时候判断
逻辑运算符
- 短路: 当前面的式子已经可以决定结果,则不运行后面的式子了
运算符 | 含义 | 规则 | 示例 | 示例结果 |
---|---|---|---|---|
|| | 短路或 | 全假为假,有真则真 | true || false | true |
&& | 短路与 | 有假则假,全真为真 | false && true | false |
! | 取反 | 结果为相反 | ! false | true |
//逻辑运算符
int x1 = 1;
int y1 = 2;
// 注意x1值改变了
System.out.println((++x1 == y1) && (++x1 != y1)); // true (2 == 2) && (3 != 2)
int x2 = 3;
int y2 = 4;
System.out.println((++x2 == y2) || (++x2 != y2)); // true (4 == 4) || (5 != 4) 发生短路
条件运算符(三元运算符)
- 语法: 条件 ? 语句1 : 语句2
- 规则: 当条件成立时运行语句1,否则运行语句2
// 条件运算符
double money = 1602;
double new_money = (money > 1500) ? (money + 200) : (money + 500);
System.out.println(new_money); // 1802 条件成立,执行 money + 200
位运算
- 计算流程:
- 将十进制转为二进制:除二取余,然后倒序排列,高位补零
- 根据运算符按位运算
运算符 | 含义 | 规则 | 示例 | 示例结果 |
---|---|---|---|---|
& | 与运算 | 同1为1 | 1 & 0 | 0 |
| | 或运算 | 同0为0 | 1 | 0 | 1 |
^ | 异或运算 | 不同为1 | 1 ^ 0 | 1 |
int num1 = 2; //10
int num2 = 3; //11
System.out.println(num1 & num2); // 2(十进制) —— 10(二进制)
System.out.println(num1 | num2); // 3(十进制) —— 11(二进制)
System.out.println(num1 ^ num2); // 1(十进制) —— 01(二进制)
运算符优先级
优先级别最低的是赋值运算符=
优先级别最高的是()
赋值运算符可以通过()控制表达式的运算顺序
算术运算符 > 关系运算符 > 逻辑运算符
备注:
具体可参考最上方优先级链接
当不确定优先级的时候,推荐直接使用()进行区分