符号
|
含义
|
备注
|
+
|
加法
|
a+b
|
-
|
减法
|
a-b
|
*
|
乘法
|
a*b
|
/
|
除法
|
a/b
两个整数相除,只保留整数部分。
有小数参与,则保留小数。
0除以任何数都等于0,任何数除以0会造成不同的错误
(整数会报异常,浮点数会出正无穷和负无穷)。
|
%
|
取余
|
a%b
取余数,例如6%4=2
|
++
|
自增
|
操作数的值增加1
++放在变量前或后是有区别的
++变量名:变量在参与其他操作前先将自己加1
变量名++:先用原来的值参与其他操作后,再将自己加1
|
--
|
自减
|
操作数的值减少1,其余同上
|
+
|
字符串连接
|
当操作数中只要有一个是String类型,
系统会自动将另一个操作数转换成字符串类型,
然后进行连接。
注意:如果String是在后面做的连接,则前面先进行整数计算。
2+3 + "你好"->5你好
"你好"+2+3->你好23
|
int x,y,z;
x = 18;
y = x++;//++运算符放在变量后面表示后加1,先把18赋值给y,然后x再加1,此时x=19,y=18
z = ++x;//++运算符放在变量前面表示先加1,x加1后为20,然后x再赋值给z,此时x=20,y=18,z=20
int d = 5%3; //输出2
int e = -5%3;//输出-2
int f = 5/2;//输出2
double g = 5.0/2;//输出2.5
符号
|
含义
|
备注
|
==
|
相等于
|
检查如果两个操作数的值是否相等,如果相等则条件为真。
会返回一个true或false,注意不要写成"="。
对于基本数据类型比较的是值;
对于引用数据类型比较的是内存地址;
|
!=
|
不等于
|
检查如果两个操作数的值是否相等,如果值不相等则条件为真。
|
<
|
小于
|
检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
|
>
|
大于
|
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
|
<=
|
小于等于(不大于)
|
检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。
|
>=
|
大于等于(不小于)
|
检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
|
boolean a = true;
boolean b = false;
System.out.println(a==b);//输出false
System.out.println(a!=b);//输出true
int c = 10;
int d = 8;
System.out.println(c>d);//输出true
int a = 10;
int b = 10;
System.out.println(a==b);//输出true
String a = new String("123");
String b = new String("123");
System.out.println(a==b);//输出false
符号
|
含义
|
备注
|
&&
|
逻辑与
|
当且仅当两个操作数都为真,条件才为真。
相当于“且”,如果用&&连接表达式时,如果左面的表达式为false,
则将不会计算其右边的表达式,又称"短路逻辑与"。
|
||
|
逻辑或
|
如果任何两个操作数任何一个为真,条件为真。
相当于“或”,如果左面的表达式为true,则将不会计算其右边的表达式,
又称"短路逻辑或"。
|
!
|
逻辑非
|
用来反转操作数的逻辑状态。如果条件为true,
则逻辑非运算符将得到false。
|
boolean a = true;
boolean b = false;
System.out.println(a&&b); //输出false
System.out.println(a||b); //输出true
System.out.println(!(a&&b)); //输出true
int c = 2;
int d = 1;
boolean e = (c!=2 && d==d++);//猜猜e,d输出什么?
boolean f = (c==2 && d==d++);//猜猜f,d输出什么?
int x = 5;
boolean y = (x<4)&&(x++<10);
System.out.println(y); //输出false,因为短路了
System.out.println(x);//输出5
符号
|
含义
|
备注
|
&
|
按位“与”
|
相当于“且”,如果用&连接表达式时,无论左面的表达式为true还是false,
都会计算其右边的表达式,即左右两边都需要进行计算。
位运算:如果相对应位都是1,则结果为1,否则为0
|
|
|
按位“或”
|
相当于“或”,如果用&连接表达式时,无论左面的表达式为true还是false,
都会计算其右边的表达式,即左右两边都需要进行计算。
位运算: 如果相对应位都是0,则结果为0,否则为1
|
^
|
异或
|
所组合的两个布尔表达式有相反的值时,才会产生true。
如果两边都是true或都是false,则返回false。
位运算:如果相对应位值相同,则结果为0,否则为1
|
~
|
翻转
|
位运算:按位补运算符翻转操作数的每一位,即0变成1,1变成0。
|
<<
|
左移
|
a<
左移运算相当于实现整数乘以2的n次方。
位移后不会改变操作数本身的结果。
|
>>
|
右移
|
a>>b,将a的二进制数据右移b位,如果最高位是0,则左边移空的部分补0,
如果最高位是1,则左边移空的部分补1。
右移运算相当于实现整数除以2的n次方。
|
>>>
|
无符号右移
|
不管最高位是0或1,左边移空部分都补0。
|
A = 0011 1100
B = 0000 1101
A&b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011
boolean c = true;
boolean d = false;
System.out.println(c^d);
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c ); //输出12
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c ); //输出61
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c ); //输出49
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c ); //输出-61
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c ); //输出240
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c ); //输出15
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c ); //输出15
符号
|
含义
|
备注
|
=
|
x=y;
|
将右操作数的值赋给左侧操作数,把变量y的值赋给x
|
+=
|
x+=y;
|
加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数
|
-=
|
x-=y;
|
减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数
|
*=
|
x*=y;
|
乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数
|
/=
|
x/=y;
|
除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数
|
%=
|
x%=y;
|
取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数
|
<<=
|
x<<=y
|
左移位赋值运算符
|
>>=
|
x>>=y
|
右移位赋值运算符
|
&=
|
x&=y
|
按位与赋值运算符
|
^=
|
x^=y
|
按位异或赋值操作符
|
|=
|
x|=y
|
按位或赋值操作符
|
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println(c); //输出30
c += a ;
System.out.println(c); //输出40
c -= a ;
System.out.println(c); //输出30
c *= a ;
System.out.println(c); //输出300
a = 10;
c = 15;
c /= a ;
System.out.println(c); //输出1
a = 10;
c = 15;
c %= a ;
System.out.println(c); //输出5
c <<= 2 ;
System.out.println(c); //输出20
c >>= 2 ;
c >>= 2 ;
System.out.println(c); //输出1
c &= a ;
System.out.println(c); //输出0
c ^= a ;
System.out.println(c); //输出10
c |= a ;
System.out.println(c);//输出10
String x = "alex";
String y = "jack";
x = y;
System.out.println(x); //猜猜看输出什么?
System.out.println(y);//猜猜看输出什么?
boolean a = (4 < 3) ? true : false;//a=false
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
顺序
|
运算符
|
1
|
括号
|
2
|
一元运算符,如 -、++、- -和 !
|
3
|
算术运算符,如 *、/、%、+ 和 -
|
4
|
关系运算符,如 >、>=、<、<=、== 和 !=
|
5
|
逻辑运算符,如 &、^、|、&&、||
|
6
|
条件运算符和赋值运算符,如 ? :、=、*=、/=、+= 和 -=
|
表达式名称
|
表达式形式
|
算术表达式
|
(x+y-12)*100
|
关系表达式
|
x>y x>=y x!=y x==y
|
逻辑表达式
|
x&&y x||y||z (!x)&&(!y)
|
赋值表达式
|
x=y x+=y
|
关键字
|
含义
|
abstract
|
抽象类或方法
|
assert
|
用来查找内部程序错误
|
boolean
|
基本数据类型:8位布尔类型(因为java中没有1位这个单位)
|
break
|
跳出一个switch或循环
|
byte
|
基本数据类型:8位整数类型
|
char
|
基本数据类型:16位字符类型
|
case
|
switch的一个分支
|
catch
|
捕获异常的try块子句
|
class
|
定义一个类类型
|
continue
|
在循环末尾继续
|
default
|
switch的缺省语句
|
do
|
do/while循环最前面的语句
|
double
|
基本数据类型:64位双精度浮点数类型
|
else
|
if语句的else子句
|
enum
|
枚举类型
|
extends
|
继承一个父类
|
final
|
一个常量,或不能覆盖的一个类或方法
|
finally
|
try块中总会执行的部分
|
float
|
基本数据类型:32位单精度浮点数类型
|
for
|
一个循环类型
|
false
|
逻辑假
|
if
|
一个条件语句
|
implements
|
定义一个类实现的接口
|
import
|
导入一个包
|
instanceof
|
测试一个对象是否是某个类的实例
|
int
|
基本数据类型:32位整型数
|
interface
|
接口,一种抽象类型,仅有方法和常量的定义
|
long
|
基本数据类型:64位长整数型
|
native
|
由宿主系统实现的一个方法
|
new
|
分配新的类实例,用于创建对象
|
null
|
一个空引用
|
package
|
包含类的一个包
|
private
|
表示私有字段,或者方法等,只能从类内部访问
|
protected
|
表示保护类型字段
|
public
|
表示共有属性或者方法
|
return
|
从一个方法中返回
|
short
|
基本数据类型:16位整数类型
|
strictfp
|
对浮点数计算使用严格的规则
|
switch
|
选择语句
|
static
|
修饰静态变量,静态代码块
|
super
|
超类对象或构造函数
|
synchronized
|
多线程同步机制,添加synchronized锁,修饰方法和块
|
throw
|
抛出一个异常
|
this
|
当前类的一个方法或构造函数的隐含参数
|
transient
|
标志非永久性的数据
|
throws
|
一个方法可能抛出的异常
|
try
|
捕获异常的代码块
|
true
|
逻辑真
|
void
|
标记方法不返回任何值
|
volatile
|
标记字段可能会被多个线程同时访问,而不做同步
|
while
|
一种循环
|
int a = 1;
int b = 2;
int c = 3;
System.out.println(b+=c--/++a);//输出什么?复习上面的运算符优先级
int x = 2;
System.out.println(x++/3);//输出什么?++在后面先操作再加1,相当于2/3,取整型
int y = 3;
System.out.println(x>=y);//输出什么?x为什么是3而不是2呢?
y = 10;
System.out.println(x>=y);//输出什么?