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:

  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 & truefalse
|OR(或)false | truetrue
^XOR(异或)true ^ falsetrue相同为false,不同为true
!NOT(非)!truefalse
&&AND(与)false && truefalse
||OR(或)false || truetrue

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

  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
<<按位左移运算符。左操作数按位左移右操作数指定的位数。(左边最高位丢弃,右边补0A << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。(最高位是0,左边补0,最高位是1,左边补1A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。(无论最高位是0还是1,左边补齐0A>>>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. 数据的测试必须考虑:正确数据,错误数据,边界数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值