Java 运算符笔记

Java 运算符笔记

1.算术运算符

  • +:加法运算符
  • -:减法运算符
  • *:乘法运算符
  • /:除法运算符
  • %:取余运算符(取模运算符)
// 推荐使用此方式,分别定义
int i3 = 3;
int i4 = 4;

// 2.使用上述变量实现算术运算符的使用
// i1,i2叫做操作数,i1 + i2叫做表达式,+叫做操作符或表达式
int result = i1 + i2;
System.out.println("i1 + i2 = " + result);
System.out.println("i1 + i2 = " + (i1 + i2));

2.算术运算符注意事项

  • 当两个整数相除时,保留整数部分,丢弃小数部分

    • System.out.println("5 / 2 = " + (5 / 2)); // 2
      
  • 如果想要保留小数部分,有两种方式

    • 处理方式一:数据类型强制转换

      System.out.println("5 / 2 = " + ((double)5 / 2)); // 2.5
      System.out.println("5 / 2 = " + (5 / (double)2)); // 2.5
      System.out.println("5 / 2 = " + ((double)5 / (double)2)); // 2.5
      
    • 处理方式二:乘以一个double类型的数,比如说1.0

      System.out.println("5 / 2 = " + (1.0 * 5 / 2)); // 2.5
      
  • 0不能做除数,0.0可以做除数,效果不同

    • System.out.println("5 / 0 = " + (5 / 0)); // java.lang.ArithmeticException(算术异常): / by zero
      System.out.println("5 / 0.0 = " + (5 / 0.0)); // 5 / 0.0 = Infinity,无穷
      System.out.println("0 / 0.0 = " + (0 / 0.0)); // 0 / 0.0 = NaN, not a number
      

3.+的两重含义:

  • 加法运算符
  • 字符串连接符
    • 将字符串与不同类型的数据连接起来,最后结果是一个字符串
    • +两边如果有字符串,就是字符串连接符

4.关系运算符(比较运算符)

  • 大于,大于等于
  • 小于,小于等于
  • ==
  • !=

所有以关系运算符作为最终运算的表达式结果一定是boolean类型

5.自增减运算符

  • ++(自增运算符)
    • 只需要一个操作数,使当前值加一
  • – (自减运算符)
    • 只需要一个操作数,使当前值减一

只能用于变量,不能用于常量

6.逻辑运算符

  • &&(逻辑与运算符)
    • 同真为真,一假为假
  • || (逻辑或运算符)
    • 一真为真,同假为假
  • !(逻辑非运算符)
    • 取反,真为假,假为真

逻辑运算符两边的操作数必须是boolean表达式

短路特性:
  • 对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式;
  • 对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第二个表达式;

逻辑运算符主要用于连接多个关系运算符作为最终运算的表达式,用于实现多个条件的连接

7.三目运算符(条件运算符)

  • 条件表达式? 表达式1: 表达式2
    
  • 判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2 。

    // 3.使用三目运算符判断是否为三位数
    System.out.println("100 <= num && num <= 999: " + ((100 <= num && num <= 999)? true:false));
    

8.赋值运算符

  • =
    • 将=右边的变量的值赋值给左边的变量,并覆盖左边变量的值
    • 赋值表达式本身也有值,其本身之值即为所赋之值
  • 复合赋值运算符
    • +=,-=,*=,/=,……
考点总结:
  • +=和常规加法不完全相同

    • // 5.1 +=和常规加法不完全相同
      byte i3 = 10;
      System.out.println("i3 = " + i3);
      // byte + int 结果为 int
      // i3 = i3 + 2; // 错误: 不兼容的类型: 从int转换到byte可能会有损失
      // byte + byte 结果为 int,编译器优化,因为byte范围小,提升为int类型,减少高位溢出的问题
      // i3 = i3 + (byte)2; // 错误: 不兼容的类型: 从int转换到byte可能会有损失
      System.out.println("i3 = " + i3);
      i3 += 2; // 等价于 i3 = (byte)(i3 + 2)
      System.out.println("i3 = " + i3);
      

9.移位运算符

  • <<(左移运算符)

    • 用于将数据的二进制位向左移动,右边用0补充
    • 左移一位相当于整数乘以2,左移两位相当于整数乘以4,以此类推
  • >> (右移运算符)

    • 用于将数据的二进制位向右移动,左边用符号位补充
    • 右移一位相当于整数除以2,右移两位相当于整数除以4,以此类推
      • 当原来的整数是偶数时,会直接乘或除以2
      • 当原来的整数是奇数时,无论正负,结果会向下取整
  • >>>(逻辑右移运算符,无符号右移)

    • 用于向数据的二进制位向右移动,左边使用0补充

    • 当整数为正数时,右移运算和逻辑右移运算是一样的

    • 当整数是负数时,结果是-2046483748除以移动的位数,然后减去整数除以2的移位次方

10.位运算符

  • &:(按位与运算符)
    • 按照二进制位对应关系,同一为一,有零为零
  • |:(按位或运算符)
    • 按照二进制位进行或运算,有一为一,同零为零
  • ~:(按位取反运算符)
    • 按照二进制位进行取反,一为零,零为一
  • ^:(按位异或运算符)
    • 按照二进制位进行异或运算,相同为零,不同为一

案例:

// 1.声明两个byte类型的变量并初始化
byte b1 = 11;
byte b2 = 13;

// 3.实现位运算符的使用
// b1: 00001011
// b2: 00001101
System.out.println("(b1 & b2): " + (b1 & b2)); // 00001001 -> 9
System.out.println("(b1 | b2): " + (b1 | b2)); // 00001111 -> 15
System.out.println("(b1 ^ b2): " + (b1 ^ b2)); // 00000110 -> 6
System.out.println("(~ b1): " + (~ b1)); // 11110100 -> 11110011 -> 00001100 -> -12
System.out.println("(~ b2): " + (~ b2)); // 11110010 -> 11110001 -> 00001110 -> -14

11.运算符的优先级

  • 从上到下优先级依次降低

  • 一元运算:只需要一个操作数(正负号)

在这里插入图片描述

int m = 1;
int n = 0;
n = m+++m++;
System.out.println(m); // 3
System.out.println(n); // 3
m = 1;
System.out.println(m+++m++); // 3
System.out.println(m); // 3
System.out.println("=============================");
m = 1;
n = ++m+m+++m;
System.out.println(m); // 3
System.out.println(n); // 7
m = 1;
System.out.println(++m+m+++m); // 7
System.out.println(m); // 3
System.out.println("=============================");
m = 1;
n = ++m+m+++m++;
System.out.println(m); // 4
System.out.println(n); // 7
m = 1;
System.out.println(++m+m+++m++); // 7
System.out.println(m); // 4
System.out.println("=============================");
m = 1;
n = (++m)+(m++)+(m++);
System.out.println(m); // 4
System.out.println(n); // 7
m = 1;
System.out.println(++m+m+++m++); // 7
System.out.println(m); // 4
System.out.println("=============================");
反例:
int m = 1;
int n = 0;
//n = ++m+m+++++m;
//n = ++++m;
//n = ++(++m);
//n = m++++;
//n = (m++)++;
System.out.println(m); // 3
System.out.println(n); // 3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值