运算符(算数、赋值、自增 自减、关系、逻辑、三元)

运算符

  • 算术运算符 + , - , *(乘法) , /(除法) , %(求余)

只能运用与和数字相关的操作

  • 赋值运算符 +=, -= , *= , /=, %=
  • 一元运算符 ++, –
  • 关系运算符 > , >= , <, <= , == , !=
  • 逻辑运算符 &&(与), ||(或), !(非), &(与) , |(或)
  • 位运算符 & (位与运算符), |(位或运算符) , ^(异步运算符), ~(取反)
  • 位移运算符 << (左移运算符), >> (右移), >>> (无符号右移运算符)
  • 三元运算符 ? :

算术运算符

两个数字做算术运算,满足以下规则:

  1. 如果包含 double 类型,结果一定是 double
  2. 如果包含 float 类型,结果一定是 float
  3. 如果包含 long 类型,结果一定是 long
  4. 其他数据、结果均为 int

赋值运算符

+=, -=, *=, /= , %= 不会改变结果的类型

byte a = 3; 
// a = a + 4 ;  // 报错,原因是 a + 4结果是 int

a += 4 ; // 正确的,原因是 += 不会提供 改变数据结果类型

自增、自减

a++ 和 ++a的区别

a++ 是 先计算 表达式的值,表达式的值等于 a的值, 再对 a 进行+1,并赋值给 a
++a 是 先对 a 进行+1, 并赋值给 a , 再将 a 的值赋值给 表达式

练习题一:

int a = 10 ;

int b = a ++ - (--a) - (a --) - (--a)

a = ? ,  b = ?
//a = 8
//b =  18

练习题二:

int a = 2;
a = a++;
//a首先为2,a++把a原先的值变成3,但赋值语句中的a依然是2,最后赋值又把a变成2了

关系表达式

  • 比较 两个数字之间的关系

逻辑表达式

  • && (与运算)
  1. 一假即假
  2. 如果第一个表达式为假、则第二个表达式不会执行
  3. && 会产生 短路 现象
  • || (或运算)
  1. 一真即真
  2. 如果第一个表达式为真,则第二个表达式不会被执行
  3. || 会产生 短路现象
  • ! (非运算)
  1. 非真即假、非假即真
  • & (逻辑与)
  1. 用法和 && 一样,但不会产生短路现象
  • | (逻辑或)
  1. 用法和 || 一样, 但不会产生短路现象

三元运算符

语法: exp1 ? exp2 : exp3

exp1 必须是一个 boolean 表达式,返回的必须是true和false
exp1 如果返回 true, 则 表达式的结果 取 exp2的 结果
exp1 如果返回 false, 则表达式的结果 取 exp3 的结果

阅读下面的代码,并找出代码中可能出现的问题,并进行改正

float a = 10 ;

float b = a > 5 ? a += 2.5 : a = a + 2.5 ; 

System.out.println(a);
System.out.println(b);

改正:(第二行)
float b = a > 5 ? a += 2.5f : (a = a + 2.5f) ;

  • 三元运算符中,应是三个表达式,不能是语句!
  • “a += b” 和 “a = a + b” 是语句也是表达式!
  • 小数默认是double,要想是float类型后应加f/F
  • 为什么后面必须加(),优先级问题? 赋值 优先级小于: ,JVM会认为若?前为false 执行a,再赋值。

你可能感兴趣的:(#,基础,java)