一、运算符和表达式
- 运算符:对常量或者变量进行操作的符号
- 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
- 举例说明:
public static void main(String[] args){
int a = 6;
int b = 4;
int c = a + b;
// + : 是运算符,并且是算数运算符
// a+b: 是表达式,由于+是算术运算符,所以这个表达式叫做算术表达式
System.out.println(a + b); // 10
System.out.println(a - b); // 2
System.out.println(a * b); // 24
System.out.println(a / b); // 1
System.out.println(a % b); // 2
System.out.println(1.0 / 3); //0.3333333333333
//格式化输出浮点数
System.out.format("%.2f",1.0/3); // 0.33
}
注意:整数相除结果只能得到整数,要想得到小数结果,必须有浮点数参与运算。
格式化输出浮点数(保留两位小数):System.out.format("%.2f",变量名);
二、字符和字符串的“+”操作
字符和字符串的区别
- 字符:单引号引起来的,用char类型来存储 char ch = 'a';
- 字符串:双引号引起来的,用String类型存储 String name = "ABC";
总结
- 字符参与加法操作,name这个字符对应的ASCII值参与运算 ( 'A' + 10 = '75','A' + '0' = 103) (ASCII值:'0' = 48 ,'A' = 65 , 'a' = 97)
- 字符串参与加法操作,加好就变成字符串连接符 ( "itheima" + "666" = "itheima666")
附表:
ASCII码表完整版
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | ” | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | X | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ~ |
31 | US | 63 | ? | 95 | — | 127 | DEL |
下表中的中文是对英文的解释,英文则对应上表中的控制字符
NUL 空 | VT 垂直制表 | SYN 空转同步 |
SOH 标题开始 | FF 走纸控制 | ETB 信息组传送结束 |
STX 正文开始 | CR 回车 | CAN 作废 |
ETX 正文结束 | SO 移位输出 | EM 纸尽 |
EOY 传输结束 | SI 移位输入 | SUB 换置 |
ENQ 询问字符 | DLE 空格 | ESC 换码 |
ACK 承认 | DC1 设备控制1 | FS 文字分隔符 |
BEL 报警 | DC2 设备控制2 | GS 组分隔符 |
BS 退一格 | DC3 设备控制3 | RS 记录分隔符 |
HT 横向列表 | DC4 设备控制4 | US 单元分隔符 |
LF 换行 | NAK 否定 | DEL 删除 |
三、运算符的优先级和结合性
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[] | 从左向右 |
2 | !(非)、+(正)、-(负)、++(自增)、--(自减) | 从右向左 |
3 | *(乘)、/(除)、%(模,取余) | 从左向右 |
4 | +(加)、-(减) | 从左向右 |
5 | <<(左移)、>>(右移)、>>>(无符号右移) | 从左向右 |
6 | <(小于)、<=(小于等于) 、>(大于)、>=(大于等于) 、 instanceof | 从左向右 |
7 | ==(等于) 、!=(不等于) | 从左向右 |
8 | &(按位与) | 从左向右 |
9 | ^(按位异或) | 从左向右 |
10 | |(按位或) | 从左向右 |
11 | &&(逻辑与) | 从左向右 |
12 | ||(逻辑或) | 从左向右 |
13 | ? :(三目运算符) | 从右向左 |
14 | =、+=、-=、*=、/=、%=、&=、|=、^=、~=、<<=、>>=、>>>= | 从右向左 |
- 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级为14的优先级最低;
- 结合性是指运算符结合的顺序,通常是从左到右,从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,负号首先和运算符右侧的内容结合;
- instanceof作用是判断对象是否为某个类或接口类型;
- 注意区分正负号和加减号,以及按位与和逻辑与的区别;
- <<表示左移,不分正负数,低位补零;>>表示右移,如果是正数,则高位补0,如果是负数,则高位补1;>>>表示无符号右移,也叫逻辑右移,即若该数为正数,则高位补0,而若该数为负数,则右移后高位同样补0;
四、自增自减运算符
- ++,--运算符:对变量做加1或者减1的操作
- ++,--放在变量的后面:先用变量参与操作,后用变量做++或--操作
- ++,--放在变量的前面:先用变量做++或--操作,后用变量参与操作
- 口诀
++--(--)在前,先加(减)1;++(--)在后,后加(减)1;
不管++(--)在前还是在后,最终变量值都会加(减)1;
- 注意
一定要区分整个表达式的值和执行完之后变量的值
a++ ----> 整个a++的式子的值是a ----> 执行完后a的值是a+1;
++a ----> 整个++a的式子的值是a+1 ----> 执行完后a的值是a+1;
a-- ----> 整个a--的式子的值是a ----> 执行完后a的值是a-1;
--a ----> 整个a--的式子的值是a-1 ----> 执行完后a的值是a-1;
- 应用示例
int a = 0;
System.out.println(++a); //结果:1 a=1
System.out.println(a++); //结果:1 a=2
System.out.println(--a); //结果:1 a=1
System.out.println(a--); //结果:1 a=0
System.out.println(++a--); //结果:1 a=0
System.out.println(++a + a++ - 1 + a--); //结果:3 a=1
五、关系运算符
符号 | 说明 |
---|---|
== | a==b,判断a和b的值是否相等,成立为true,不成立为false |
!= | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
> | a>b,判断a是否大于b,成立为true,不成立为false |
>= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
< | a<b,判断aa是否小于b,成立为true,不成立为false |
<= | a<=b,判断aa是否小于等于b,成立为true,不成立为false |
- 应用示例:
//判断两个数字的关系
int a = 10;
int b = 20;
//判断a、b是否相等
boolean b1 = a == b; //false
//判断a、b是否不相等
boolean b2 = a != b; //true
//判断a是否大于b
boolean b3 = a > b; //false
//判断a是否大于等于b
boolean b4 = a >= b; //false
//判断a是否小于b
boolean b5 = a < b; //true
//判断a是否小于等于b
boolean b6 = a <= b; //true
六、逻辑运算符
符号 | 说明 |
---|---|
&、&& | 逻辑与:表达式中有false则结果为false。 &:不会短路,无论前面的表达式是否成立,都会将后面所有表达式进行判断; &&(短路与) :会短路,只要前面的表达式出现false,则整个表达式被短路,即不执行后面的表达式。 |
|、|| | 逻辑或:表达式中有true则结果为true。 |:不会短路无论前面的表达式是否成立,都会将后面所有表达式进行判断; ||(短路或) :会短路,只要前面的表达式出现true,则整个表达式的结果为true,表达式将会被短路,即执行后面的表达式 |
^ | 逻辑异或:相同为false,不同为true |
! | 逻辑非:结果为true,作!运算则变为false;结果为false,作!运算则变为true |
应用示例:
boolean flag1 = true;
boolean flag2 = false;
boolean flag3 = true;
int a = 1;
boolean flag;
flag = flag1 & a>0; //flag:true a:1
flag = flag2 & a++>0; //flag:false a:2 没有发生短路,a++得到执行
flag = flag1 && a>0; //flag:true a:1
flag = flag2 && a++>0; //flag:false a:2 发生短路,a++没有得到执行
flag = flag1 | a++>0; //flag:true a:3 没有发生短路,a++得到执行
flag = flag2 | a++>0; //flag:false a:4
flag = flag1 || a++>0; //flag:true a:4 发生短路,a++没有得到执行
flag = flag2 || a++>0; //flag:false a:5
flag = flag1 ^ flag2; //flag:true 不同为true
flag = falg1 ^ flag3; // flag:false 相同为false
flag = !flag1; //flag:false
flag = !flag2; //flag:true
七、三元运算符
- 格式:关系表达式?表达式1:表达式2;
- 格式范例:a > b ? a:b;
- 计算规则:
- 计算关系表达式的值
- 如果值为true,表达式1就是运算结果;如果值为false ,表达式2就是运算结果
- 应用示例:
//比较两个数的大小
int a = 2;
int b = 1;
//输入a、b中较大的数
int c = a > b ? a : b; //2
System.out.println(c);
//输入a、b中较小的数
int d = a < b ? a : b; //1
System.out.println(d);
八、数据输入Scanner类
- 使用步骤:
- 导包:import java.util.Scnnae
- 创建Scanner对象:Scanner sc = new Scanner(System.in);
- 接收数据(整数为例):int x = sc.nextInt();
- 应用示例
//导入Scanner包
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//创建Scanner类
Scanner sc = new Scanner(System.in);
//从键盘接收数据
int n = sc.nextInt();
//输出从键盘接收的数据
System.out.println("n=" + n);
}
}