java基础语法2(DAY3)
1. 运算符
就是对常量和变量进行操作的符号
1. 算术运算符
设整数变量A的值为10,变量B的值为20
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 :相加运算符两侧的值 | A + B 等于 30 |
- | 减法 : 左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法 :相乘操作符两侧的值 | A * B等于200 |
/ | 除法 : 左操作数除以右操作数 | B / A等于2 |
% | 取余 : 左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1(对变量) | B++ 或 ++B 等于 21 |
– | 自减: 操作数的值减少1(对变量) | B-- 或 --B 等于 19 |
PS:
-
除法( / ):整数相除只能得到整数
若想获得小数,只需要将操作的数据中任意的一个数据变为浮点数
例如:
System.out.println(x * 1.0 / y);
-
/ :获取的是商,%:获取的是余数
-
++,–运算符:
-
单独使用
-
前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。
-
后缀自增自减法(a++,a–): 先进行表达式运算,再进行自增或者自减运算
-
+的用法:
1)加法
2) 正号
3)字符串连接符
-
附优先级表:
优先级 | 描述 | 运算符 |
---|---|---|
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、–、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
2. 赋值运算符
操作符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
%= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
思考题:
short s = 1;s = s + 1;
short s = 1;s += 1;
第一行有问题,s + 1 在运算时,会将s默认转化为int类型,将int类型赋给short类型会产生错误。
第二行没有问题,扩展的赋值运算符( += 、-= 、*=、/=、%=)隐含一个强制类型转换。
即:s+=1; 等价于 s = (s的数据类型)(s + 1) ;
3. 关系运算符
比较运算符的计算结果为boolean类型
设整数变量A的值为10,变量B的值为20
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
注:不能把“==”写成“=”
boolean flag = (a == b); //没问题
boolean flag = (a = b); //这个是有问题的,不兼容的类型
int c = (a = b); //把b赋给a,然后将a留下
4. 逻辑运算符
逻辑运算符用于连接布尔型表达式
运算符 | 运算 | 范例 | 结果 | |
---|---|---|---|---|
& | AND(与) | false & true | false | |
| | OR(或) | false | true | true | |
^ | XOR(异或) | true ^ false | true | 相同为false,不同为true |
! | NOT(非) | !true | false | |
&& | AND(与) | false && true | false | |
|| | OR(或) | false || true | true |
&&与& 和 || 与| 的区别:
-
最终结果一样
-
&&具有短路效果,左边为false,右边将不执行
-
|| 也具有短路效果,左边为true,右边将不执行
5. 位运算符
假设整数变量 A 的值为 60 和变量 B 的值为 13:
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0(有0则0) | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是 0,则结果为 0,否则为 1(有1则1) | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1(相同则0,不同则1) | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位。(0变成1,1变成0)。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。(左边最高位丢弃,右边补0) | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。(最高位是0,左边补0,最高位是1,左边补1) | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。(无论最高位是0还是1,左边补齐0) | A>>>2得到15即0000 1111 |
注:做位运算,首先要把数据转换为二进制。
-
位异或(^):某个数据对另一个数据异或两次,该数不变
-
按位左移运算符(<<):
将左边数据乘以2的移动次幂。例如:3<<2 等价于 3 * 2 ^ 2 = 12
-
按位右移运算符(>>) 、按位右移补0操作符(>>>):
当左边数为正数时,将左边数据除以2的移动次幂。例如:24>>2 等价于 24 / (2 ^ 2) = 6。
面试题:两个整数变量的交换
方式一:使用第三方变量
int c = a;
a = b;
b = c;
方式二:用位异或实现
左边:a、b、c
右边:a ^ b
a = a ^ b;
b = a ^ b;//a ^ b ^ b = a
a = a ^ b;//a ^ b ^ a = b
方式三:用变量相加的方法
a = a + b;
b = a - b;
a = a - b;
方法四:一句话搞定
b = (a + b) - (a = b);
6. 三目运算符
格式:(比较表达式)?表达式1:表达式2
比较表达式结果是一个boolean类型
如果条件为 true,运算结果为表达式1
如果条件为false,运算结果为表达式2
练习:
-
获取三个数中的最大值
//分两步 int temp = ((a > b) ? a : b); int max = (temp > c ? temp : c); //一步 int max1 = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
-
比较两个数是否相同
boolean flag = (m == n) ? true : false;
但是不建议上面写法
boolean flag = (m == n);
此写法即可,因为m == n返回的就是boolean类型
2. 键盘录入
三步:
-
导包:
-
格式:
import java.util.Scanner;
-
位置:
在class上面
-
-
创建键盘录入对象
格式:
Scanner sc = new Scanner (System.in);
-
通过对象获取数据
格式:
int x = sc.nextInt();
3. 流程控制语句
1. 顺序结构:
2. 选择结构:(if语句、switch语句)
if语句:
-
第一种格式:
if(关系表达式){ 语句体; }
-
第二种格式:
if(关系表达式){
语句体1;
}else{
语句体2;
}
- 第三种格式:
if(关系表达式){
语句体1;
}else if(关系表达式2){
语句体2;
}
... ...
else{
语句体n+1;
}
if语句的注意事项:
- 关系表达式必须为boolean类型
- 如果是一条语句,大括号可以省略,如果是多条语句,就不能省略,建议永远不省略
- 一般来说,有左大括号就没有分号,有分号就没有左大括号
- else后面没有比较表达式,只有if后面有
a. 三元运算符实现的,都可以采用if语句实现。反之不成立。
b. 当if语句控制的操作是一个输出语句的时候就不能替换,因为运算符操作完毕后就应该有个结果,而不是一个输出。
c. 数据的测试必须考虑:正确数据,错误数据,边界数据
本文地址:https://blog.csdn.net/m0_46683623/article/details/107272431
上一篇: 常用的配置文件