Java学习之路Day3

运算符

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符(不常用)
  • 三元运算符

算术运算符

+ 正号 - 负号
+ - * / %
++自增 分为++aa++
--自减 分为--aa--
+ 字符串连接符

注意

  1. 除法运算/
int result = 12 / 5;    // result = 2
int result = 12 / 5 * 2; //result = 10
double result = 12 / 5 + 0.0;  //result = 2.0
double result = (double)(12 / 5);  //result = 2.0
double result = (double)12 / 5; //reslut = 2.4
double result = 12 / (5 + 0.0); //result = 2.4

  1. 取模运算%
int result = 12 % 5;// result = 2
int result = -12 % 5;// result = -2
int result = 12 % -5;// result = 2
int result = -12 % -5;// result = -2

结论
取模运算结果的符号被模数的符号相同。被模数是正号,结果为正号,被模数为负号,结果为负号。

  1. 在编程过程中,如果想要给byte,short,char类型变量+1或者-1,最好使用++或者--。因为++或者--运算不会改变变量本身的数据类型。
short a = 10;
a = a + 1; //错误,返回结果为int类型,把int类型的值赋给short类型的变量会报错报错,编译不通过
++a;  //正确 a = 11

特例:
byte b1 = 127;
++b1;  // b1 = -128  这个可以根据底层的01存储分析可得,注意计算机底层使用**补码**的方式对数值存储的

简单分析题:

int n = 10;
n += (n++) + (++n);

n 的结果是 32;
分析:上述可以理解为
n = n + (n++) + (++n);
n = 10 + 10(此处n把10返回,然后自增1, n =  11) + 12(先增1, 然后再返回n = 12);
n = 10 + 10 + 12; // 32

赋值运算符

= += -= *= /= %=

注意

  • =两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
  • 支持连续赋值。举例:i = j = 10; int i = j = 10;
  • 上述6种赋值运算符,都不会改变变量本身的数据类型。
    short b1 = 10;
    b1 += 10;
    b1 = b1 + 10; //右侧返回结果为int型,int型不能赋值为short型变量。

关系运算符

> < == != >= <= instanceof
结论:

  • 比较运算符的结果都是boolean类型,要么为true,要么为false;
  • > < >= <= : 只能使用在数值型的数据之间做关系运算。
  • ==!=:不仅可以使用在数值型数据 变量之间,还可以使用在其他引用类型变量之间。

注意:

  • ==不要误写成=;

逻辑运算符

& && | || ! ^(异或)

注意:

  • &&&
    & 左边无论真假,右边都进行运算。
    && 如果左边为真,右边参与运算,如果左边为假,右边不参与运算。(惰性

    • 不论是&&&两者的运算结果都相同。
    • &或者&&左边为true时,右边都参与运算。

&&&不同点: 当运算符左侧为false时,&会继续执行符号右侧的运算,&&不会执行符号右侧的运算,直接短路。

  • |||
    | 左边无论真假,右边都进行运算。
    ||如果左边为假,右边参与运算,如果左边为真,右边不参与运算。(惰性
    • 不论是|||两者的运算结果都相同。
    • |或者||左边为false时,右边都参与运算。

|||不同点:当符号左侧为true时,|会继续执行符号右侧的运算,||不会执行符号右侧的运算,直接短路。

位运算符

>> << >>> & | ~(位非) ^(位异或)
总结:

  1. 位运算符的操作对象都是整型变量或者常量。
  2. <<在一定范围内,每向左移1位,相当于乘2,空位拿0填充。
  3. >>在一定范围内,每向右移1位,相当于除2,空位拿符号位填充。
  4. >>> : 无符号右移,空位拿0填充。
  5. & | ~ ^ 这几个位运算符在运算过程中,也会对符号位进行操作。

注意:
如何区分&逻辑运算符还是位运算符?
& 如果符号两侧运算符是boolean对象,则该运算符是逻辑运算符
& 如果符号两侧运算符对象是整型变量或者常量对象,则该运算符为位运算符

三元运算符

判断条件 ? 表达式1 : 表达式2
判断条件为true时,执行表达式1;
判断条件为false时,执行表达式2;

总结:

  • 三元运算符可以嵌套使用。
  • 三元运算符结构的程序一定可改写为if-else结构,但是if-else结构不一定能改写为三元运算符结构。
  • 如果程序既可以使用三元运算符,又可以使用if-else结构,那么直接使用三元运算符。简洁,运算效率高。

注意:

int max = 1 > 2 ? 1 : 2; //正确
1 > 2 ? 1 : 2; //错误。必须将结果赋给某个对象。这也是为什么if-else不一定能改写为三元运算符的原因。

举例:
1 > 2 ? 1 : "2大";  //三元运算符不成立。返回结果没有办法赋值给统一的一个对象。

运算符优先级

没有必要刻意背诵优先级关系,如果在编程过程中不确定运算符好的优先级关系,可以使用()来改变运算顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值