变量&运算符
变量&运算符
1 补充
1.1 关键字
关键字是被java语言赋予特殊含义,具有专门用途的单词。
关键字特点:
- 组成关键字的字母全部都是小写
- 在常用的IDE中,针对关键字有特殊的颜色标记,非常直观。所以我们不需要去死记硬背。
![image-20250619095144948]()
1.2 注释
注释概述:用于解释说明程序的文字
注释的内容不会参与编译和运行
注释分类:
- 单行注释
- 格式: // 注释文字
- 快捷键: ctrl + /
- 多行注释 可以注释一行 也可以注释多行
- 格式: /* 注释文字 */
- 快捷键: ctrl + shift + /
- 文档注释(以后再讲)
1.3 字面量
字面量(常量):在程序执行过程中,其值不可以发生改变的量
- 字符串常量: 用双引号括起来的内容
- 整数常量: 所有的整数
- 小数常量: 所有的小数
- 字符常量: 用单引号括起来的内容
- 字符常量中只能放一个字符
- 布尔常量: 只有true和false
- 空常量: null (数组那天再讲)
1.4 转义字符
public static void main(String[] args) {
// "我爱中国"
// \"
System.out.println("\"我爱中国\"");
// \'
System.out.println('\'');
// \\
System.out.println("\\");
// \t 制表符
System.out.println("\t我爱中国");
// \u0000
System.out.println('\u0000');
// \n 换行
System.out.println("\n");
// \r 回车
System.out.println("\r");
}
1.5 常见码表
- ASCII码表总共有128个,包含了英文的大小写,常用符号和阿拉伯数字
- ISO8859-1码表总共有256个, 西欧码表中的前128位还是ASCII码表
- GB2312 -- 使用两个字节表示一个汉字 GBK
- 国际上建立一个Unicode编码体系,按照这套规范体系产生一个UTF-8码表 使用三个字节表示一个汉字
2 变量
2.1 变量概述
在程序执行过程中,在某个范围内其值可以发生改变的量
本质上,变量是内存中存储数据的区域,可以存数据和取数据,也可以改变数据。
格式:
数据类型 变量名 = 字面量;
数据类型 变量名;
变量名 = 字面量;
2.2 标识符
-
作用:给包、类、方法、变量起名字的
-
组成规则(硬性规定):由字符和下划线_ 美元符$ 组成
- 字符采用的是Unicode字符集,包含英文大小写字母,中文字符,数字字符。
- 符号只有两个 _ $
-
注意事项(硬性规定):
- 不能以数字开头
- 不能是java中的关键字
-
命名规则(建议):
- 见名知意
- 变量和方法:
- 第一个单词小写,后面单词的首字母都大写
- 类
- 每一个单词的首字母都大写
- 包:其实就是文件夹,用于对类进行管理
- 全部小写,多级包用.隔开
- 是公司域名的反写
- 常量名 用大写字母组成,单词之间用_隔开 MAX_LENGTH
2.3 数据类型
2.3.1 计算机存储单元
无论是内存还是硬盘,计算机存储设备的最小信息单元叫(位 bit),也称之为比特位,用b表示。计算机中最小的存储单元叫"字节",由大写B表示。
一个字节由连续的8个比特位组成。
1B = 8b
1KB = 1024B
1MB = 1025KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
2.3.2 基本数据类型
在java中,数据类型分为基本数据类型和引用数据类型
| 四类 | 八种 | 字节数 | 数据表示范围 |
|---|---|---|---|
| 整型 | byte | 1 | -128 ~ 127 |
| 整型 | short | 2 | -32768 - 32767 |
| 整型 | int(默认) | 4 | -2 ^ 31 - 2 ^ 31 - 1 |
| 整型 | long | 8 | -2 ^ 63 - 2 ^ 63 - 1 |
| 浮点型 | float | 4 | -3.403E38 - 3.403E38 |
| 浮点型 | double(默认) | 8 | -1.798E308 - 1.798E308 |
| 字符型 | char | 2 | 表示字符 'a' '我' 0-65535 |
| 布尔型 | boolean | 1 | true 和 false |
整数默认类型是int,浮点型默认类型是double
定义long类型数据时,要加L或者l 建议添加L
定义float类型时,要添加F或者f,建议添加F
2.3.3 基本数据类型变量声明和使用
public static void main(String[] args) {
// 格式: 数据类型 变量名 = 字面量;
// byte
byte b1 = 127;
System.out.println(b1);
// short
short s1 = 20000;
System.out.println(s1);
// int
int num1 = 1400_000_000;
System.out.println(num1);
// long
long num2 = 8000_000_000L;
System.out.println(num2);
// float
float num3 = 3.14F;
System.out.println(num3);
// double
double num4 = 5.6435;
System.out.println(num4);
// char
char c1 = '中';
System.out.println(c1);
// boolean
boolean b2 = true;
System.out.println(b2);
}
补充:idea 2024版本卡死bug解决

2.3.4 变量的注意事项
- 变量如果没有进行赋值,是不可以直接使用的
- 变量只有在自己所处的作用域之内才有效,出了作用域之后,就不能使用了
- 作用域:从变量定义的那一行开始,到所在的大括号结束为止
- 一行中可以一次性定义多个相同数据类型的变量并赋值
public static void main(String[] args) {
// int a;
// // shift + alt + 上下
// System.out.println(a);
// a = 10;
int a = 20;
{
}
System.out.println(a);
int x,y,z;
int b = 20,c = 30;
System.out.println(b);
}
2.4 类型转换
当数据类型不一致时,需要进行类型转换
-
自动(隐式)类型转换
- 由范围小的数据类型转换为范围大的数据类型
- 特点:代码不需要特殊处理,自动完成
- 任何一个整型都可以赋值给浮点型变量,但是可能会出现精度损失
-
强制(显式)类型转换
- 由范围大的数据类型转换成范围小的数据类型
- 特点:代码需要特殊处理,否则就编译失败
- 格式:范围小的数据类型 变量名 = (范围小的数据类型)范围大的值;
- 有可能会出现精度损失
- 把浮点型转换成整型时,需要强制类型转换。当小数转换成整数时,不是四舍五入,而是直接舍弃掉小数部分。
-
byte/short/char在进行运算时会先提升为int类型再进行计算
-
char/byte/short类型来说,如果右侧没有超出范围,编译器会自动补全一个强制类型转换
package cn.javasm.demo;
public class TestDemo3 {
public static void main(String[] args) {
// long(大) = int(小)
long num1 = 100;
System.out.println(num1);
// double(大) = float(小)
double num2 = 3.14F;
System.out.println(num2);
int num3 = 1000000345;
float f = num3;
System.out.println(f);
// int(小) = long(大)
int num4 = (int)8000000000L;
System.out.println(num4);
// float(小) = double(大)
float num5 = (float) 3.14;
System.out.println(num5);
int num6 = (int)3.99F;
System.out.println(num6);
// char类型可以转换
char c = 'a';
int num7 = c;
System.out.println(num7);
// char类型也可以参与运算
System.out.println(c + 1);
byte num8 = 20;
// byte/short/char在进行运算时会先提升为int类型再进行计算
// byte(小) = int(大)
byte num9 = (byte)(num8 + 1);
System.out.println(num9);
byte num10 = 30;
short num11 = 100;
// short(小) = int(大)
// short result = num10 + num11;
// byte(小) = int(大)
// char/byte/short类型来说,如果右侧没有超出范围,编译器会自动补全一个强制类型转换
byte a = 10;
byte b = (byte)128;
System.out.println(b);
short s = 30000;
char c1 = 98;
System.out.println(c1);
short s2 = 'b';
System.out.println(s2);
// 乱码
char c2 = (char)-1;
System.out.println(c2);
// 编译器是分开进行编译的,编译char c3 = 'b';能够确定c3的值是'b'
// 当编译到short s3 = c3时,只能确定c3的类型是char类型,并不能确定c3的值。这时有可能c3的值超出short类型的范围
char c3 = 'b';
short s3 = (short) c3;
}
}
3 运算符
3.1 概述
- 运算符就是对常量或者变量进行操作的符号
- 表达式:用运算符把常量或者变量连接起来的符合java语法的式子就可以称之为表达式
- 分类:
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 三元运算符
- 位运算符
3.2 算术运算符
public static void main(String[] args) {
// 算术运算符
// + 加
int a = 10;
System.out.println(a + 1);
// char和字符串都可以加
char c1 = 'a';
System.out.println(c1 + 1);
// 任何类型和字符串相加,结果都是字符串
System.out.println("hello" + 1 + 2);
System.out.println(true + "hello");
// - 减
System.out.println(a - 1);
// * 乘
System.out.println(a * 10);
// / 除 两个整数相除,结果一定是整数 只看商,舍弃余数
System.out.println(a / 20);
// 只要除法的两端有小数,那么结果就是小数
System.out.println(10 / 20.0);
// % 取模(余)
System.out.println(a % 20);
// ArithmeticException
// System.out.println(1 / 0);
System.out.println(1.0 / 0);// Infinity 无穷
System.out.println(-1.0 / 0);// -Infinity 负无穷
System.out.println(0.0 / 0);// NaN not a number 非数字
// 对于负数取余,结果就是看表达式左边的服啊后
System.out.println(-5 % 3);// -2
System.out.println(-5 % -3);// -2
System.out.println(5 % -3);// 2
// 小数取余
System.out.println(3.6 % 2);// 1.6
System.out.println(3 % 1.4);
double d = 3.0 - 2.99;
System.out.println(d);
}
自增自减运算符
自增运算符 ++
自减运算符 --
可以放在变量前面,也可以放在变量后面,会对变量进行+1或者-1的操作
- 对于单独使用,放在变量前面或者后面没有区别
- 对于混合使用
- 如果符号在变量前面,首先对变量自身进行加1(减1)操作,然后再进行其他操作
- 如果符号在变量后面,先进行其他操作,然后对变量自身进行加1(减1)操作
public static void main(String[] args) {
int a = 10;
// sout() a++
System.out.println(++a);
System.out.println(a);
int b = 100;
int result = ++b + 1;
System.out.println(b);// 101
System.out.println(result);// 102
int x = 30;
int y = 40;
// int num1 = ++x;// 31
// int num2 = y--;// 40
// int result1 = num1 + num2;
int result1 = ++x + y--;
System.out.println(x);// 31
System.out.println(y);// 39
System.out.println(result1);// 71
}
自增自减运算符隐藏了一个类型转换
byte b1 = 127;
b1++;// b1 = (byte)(b1 + 1);
System.out.println(b1);
3.3 赋值运算符
赋值运算符代表一个动作,将右边的值交给左边
=
+= -= *= /+ %=
public static void main(String[] args) {
int a = 10;
a += 20;// a = a + 20;
System.out.println(a);
a -= 10;// a = a - 10
System.out.println(a);
a *= 10;// a = a * 10;
System.out.println(a);
a /= 10;// a = a / 10;
System.out.println(a);
a %= 10;// a = a % 10;
System.out.println(a);
// 隐藏了一个强制类型转换
short b = 20;
b += 20;// b = (short)(b + 20);
System.out.println(b);
// 连等赋值
int c = 4;
int d = c += c -= c *= c;
System.out.println(d);
}
3.4 关系(布尔)运算符
关系运算符的结果都是布尔值(true或者false)
== 相等
!= 不相等
> 大于
>= 大于等于
< 小于
<= 小于等于
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
System.out.println(a == c);
System.out.println(a != c);
System.out.println(a > c);
System.out.println(a >= c);
System.out.println(a < c);
System.out.println(a <= c);
}
3.5 逻辑运算符
逻辑运算符连接的都是布尔值
与(且): & 全部都是true才是true,任何一个是false,那么就是false
或: | 只要有一个是true,那么结果就是true,全部都是false,结果才是false
异或: ^ 相同就是false,不同就是true
非(取反): 如果是true,就是false,如果是false,就是true
int a = 10;
int b = 20;
int c = 10;
System.out.println((a > b) & (b > c) & (c == b) | (a == c));
System.out.println((a == c) | (b < c));
System.out.println((a == c) ^ (b > c));
System.out.println(!(a == c));
&&(||)和&(|)的区别
&&(||)具有短路效果:如果左边的表达式的结果已经能够决定最终结果,那么右边的代码就不会再执行了,可以提高执行效率
System.out.println(3 > 4 && ++a < 1000);
System.out.println(a);
3.6 三元运算符
三元运算就是有三个元素参与的运算。
格式:
数据类型 变量名 = 判断条件 ? 表达式A : 表达式B;
如果判断条件的结果是true,那么将表达式A赋值给左边的变量
如果判断条件的结果是false,那么将表达式B赋值给左边的变量
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
int max1 = ((a > b) ? a : b);
int max = (max1 > c) ? max1 : c;
System.out.println("最大值是" + max);
int row = 0;
System.out.println(row > 0 ? "success" : "error");
}
作业: b分别是多少?
int a = 4;
int b = a++ + ++a;
int a = 4;
int b = ++a + a++;


浙公网安备 33010602011771号