运算符
1.算术运算符:+ - * / % ++ -- + (连接符)
设整数变量A的值为10,变量B的值为20:
+ | 加法:相加运算符两侧的值 | A + B 等于 30 |
- | 减法:左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法:相乘操作符两侧的值 | A * B等于200 |
/ | 除法:左操作数除以右操作数 | B / A等于2 |
% | 取余:左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1 |
++在前:先自增1,后运算 ++在后:先运算,后自增1 |
-- | 自减: 操作数的值减少1 |
--在前:先自减1,后运算 --在后:先运算,后自减1 |
连接符:+ | 只能使用在String与其他数据类型变量之间使用。 |
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 |
<< = | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
| = | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
1 int i2,j2; 2 //连续赋值 3 i2 = j2 = 10; 4 5 int i3 = 10,j3 = 20; 6 int num1 = 10; 7 num1 += 2;//num1 = num1 + 2; 8 System.out.println(num1);//12 9 10 int num2 = 12; 11 num2 %= 5;//num2 = num2 % 5; 12 System.out.println(num2); 13 14 short s1 = 10; 15 //s1 = s1 + 2;//编译失败 16 s1 += 2;//结论:不会改变变量本身的数据类型 17 System.out.println(s1);
3.关系运算符(关系运算符): == != > < >= <=
== | 相等为真 |
!= | 值不相等为真 |
> | 大于为真 |
< | 小于为真 |
>= | 大于或等于为真 |
<= | 小于或等于为真 |
- 比较运算符的结果是boolean类型
- > < >= <= :只能使用在数值类型的数据之间。
- == 和 !=: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。
1 Account acct1 = new Account(1000); 2 Account acct2 = new Account(1000); 3 boolean b1 = (acct1 == acct2);//false比较两个Account是否是同一个账户。
boolean b2 = (acct1 != acct2);//true
instanceof
左边的对象是否是它右边的实例。返回 boolean 的数据类型。
1 import java.util.ArrayList; 2 import java.util.Vector; 3 4 public class Main { 5 6 public static void main(String[] args) { 7 Object testObject = new ArrayList(); 8 displayObjectClass(testObject); 9 } 10 public static void displayObjectClass(Object o) { 11 if (o instanceof Vector) 12 System.out.println("对象是 java.util.Vector 类的实例"); 13 else if (o instanceof ArrayList) 14 System.out.println("对象是 java.util.ArrayList 类的实例"); 15 else 16 System.out.println("对象是 " + o.getClass() + " 类的实例"); 17 } 18 }
对象是 java.util.ArrayList 类的实例
4.逻辑运算符:& && | || !
操作的都是boolean类型的变量。而且结果也是boolean类型
& && 与
相同点1:& 与 && 的运算结果相同
相同点2:当符号左边是true时,二者都会执行符号右边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算(两个的会短路)。
开发中,推荐使用&&,效率高
| || 或
相同点1:| 与 || 的运算结果相同
相同点2:当符号左边是false时,二者都会执行符号右边的运算
不同点:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算(两个的会短路)。
开发中,推荐使用||,效率高
! 非
反转操作数的逻辑状态
5.位运算符:<< >> >>> & | ^ ~
& | 如果相对应位都是1,则结果为1,否则为0 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 |
^ | 如果相对应位值相同,则结果为0,否则为1 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
6.三元运算符:(条件表达式)? 表达式1 : 表达式2
① 条件表达式的结果为boolean类型
② 根据条件表达式真或假,决定执行表达式1,还是表达式2
如果表达式为true,则执行表达式1。
如果表达式为false,则执行表达式2。
③ 表达式1 和表达式2要求是一致的。
④ 三元运算符可以嵌套使用
⑤凡是可以使用三元运算符的地方,都可以改写为if-else。反之,不成立,不一定都可以。
⑥如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。原因:简洁、执行效率高。
今天比昨天晚,却比明天早