java基础语法2(DAY3)

2022-08-07,,,

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:

  1. 除法( / ):整数相除只能得到整数

    若想获得小数,只需要将操作的数据中任意的一个数据变为浮点数

    例如:System.out.println(x * 1.0 / y);

  2. / :获取的是商,%:获取的是余数

  3. ++,–运算符:

    1. 单独使用

    2. 前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。

    3. 后缀自增自减法(a++,a–): 先进行表达式运算,再进行自增或者自减运算

    4. +的用法:

      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

&&与& 和 || 与| 的区别:

  1. 最终结果一样

  2. &&具有短路效果,左边为false,右边将不执行

  3. || 也具有短路效果,左边为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

:做位运算,首先要把数据转换为二进制。

  1. 位异或(^):某个数据对另一个数据异或两次,该数不变

  2. 按位左移运算符(<<):

    将左边数据乘以2的移动次幂。例如:3<<2 等价于 3 * 2 ^ 2 = 12

  3. 按位右移运算符(>>) 、按位右移补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

练习:

  1. 获取三个数中的最大值

    //分两步
    int temp = ((a > b) ? a : b);
    int max = (temp > c ? temp : c);
    //一步
    int max1 = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
    
  2. 比较两个数是否相同

    boolean flag = (m == n) ? true : false;
    

    但是不建议上面写法

    boolean flag = (m == n);
    

    此写法即可,因为m == n返回的就是boolean类型

2. 键盘录入

三步:

  1. 导包:

    1. 格式:
      import java.util.Scanner;

    2. 位置:
      在class上面

  2. 创建键盘录入对象

    格式:

    Scanner sc = new Scanner (System.in);

  3. 通过对象获取数据

    格式:
    int x = sc.nextInt();

3. 流程控制语句

1. 顺序结构:

2. 选择结构:(if语句、switch语句)

if语句:

  1. 第一种格式:

       if(关系表达式){
    	语句体;
    }
    
  2. 第二种格式:

if(关系表达式){
	语句体1;
}else{
	语句体2;
}
  1. 第三种格式:
if(关系表达式){
	语句体1;
}else if(关系表达式2){
	语句体2;
}
... ...
else{
	语句体n+1;
}

if语句的注意事项:

  1. 关系表达式必须为boolean类型
  2. 如果是一条语句,大括号可以省略,如果是多条语句,就不能省略,建议永远不省略
  3. 一般来说,有左大括号就没有分号,有分号就没有左大括号
  4. else后面没有比较表达式,只有if后面有

a. 三元运算符实现的,都可以采用if语句实现。反之不成立。

b. 当if语句控制的操作是一个输出语句的时候就不能替换,因为运算符操作完毕后就应该有个结果,而不是一个输出。

c. 数据的测试必须考虑:正确数据,错误数据,边界数据

本文地址:https://blog.csdn.net/m0_46683623/article/details/107272431

《java基础语法2(DAY3).doc》

下载本文的Word格式文档,以方便收藏与打印。