Java运算符
Java
中的运算符分为以下几种:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
算术运算符
算术运算符包括以下几种:
+
,加法-
,减法*
,乘法/
,除法%
,取余++
,自增--
,自减
不同类型的数据之间进行运算,得到的结果的数据类型为范围最大的那个数据类型,如:
double d = 2 + 3.5; //int + double ==> double
int i = 2 + 3.5; //该写法错误
加法有两种作用:
- 两数字间进行加法运算
- 字符串的连接
int c = 3 + 5; //进行加法运算,结果为8
String s = "Hello" + "World"; //拼接为HelloWorld
注意:任何数据类型与字符串连接时,会自动变成字符串
String s = 1 + "Hello"; //1Hello
除法需要注意的是,两个整数相除,得到的还是整数,即使除不尽,如
int a = 10/3; //a = 3
下面重点介绍++
和--
,由于二者十分的相似,这里只介绍++
。++
的作用是自动加1
,如
int a = 3;
a++; //相当于a = a + 1 a变为了4
其中++
可以在变量的前面,也可以在变量的后面,如下
a++;
++a;
二者的作用均是使变量a
加1
,当二者如上单独使用时,二者没有区别,但是当混合使用时,有区别,具体表现如下
++a
:先将a
进行+1
,然后使用a
a++
:先使用a
,再将其进行+1
例如:
int a = 3;
b = a++; //先使用a,即先将a的值赋值给b,所以b=3,然后+1,所以最后a=4
int a = 3;
b = ++a; //先将a+1,即a=4,然后将a赋值给b,所以b=4
--
的作用是减1
,其用法同++
一模一样,这里不多加介绍。
注意:
- 常量不能进行
++,--
运算
30++; //该写法是错误的
赋值运算符
赋值运算符分为基本赋值运算符和复合赋值运算符
- 基本赋值运算符
=
- 复合赋值运算符
+=
-=
*=*
/=
%=
基本赋值运算符的作用就是把右边的值赋给左边的变量
int a = 3; //把3赋给变量a
注意:
- 常量是不变的,不能被赋值,所以常量不能出现在赋值运算符的左边
50 = 30; //该写法是错误的
复合赋值运算符,这里介绍+=
,其他与它类似
int a = 3;
a += 3; //相当于a = a + 3
a *= 3; //相当于a = a * 3
// 其他的同理可以知道... ...
注意:
- 复合赋值运算符隐含了强制类型转换
short s = 2;
s += 2; //这里暗含了强制类型转换,s + 2得到的是一个int类型,被强制转换为了short类型,所以相当于s = (short) (s + 2);
比较运算符
比较运算符对操作数进行比较,得到一个boolean
数据类型的值,比较运算符包含以下:
==
:判断两个数是否相等>
<
>=
:大于等于<=
!=
:判断两个数是否不相等
注意:
- 在判断某变量属于某区间,比如是否大于
3
小于5
时,不能写成3 < x < 5
,应当使用后面提及的逻辑运算符3 < x && x < 5
逻辑运算符
逻辑运算符的对象是boolean
数据类型的值,包含下面三个操作
&&
:与操作,当两个操作数同时为true
时,结果才为true
||
:或操作,两个操作数中有一个操作数为true
时,结果就为true
!
:非操作,!true = false, !false = true
注意:
- 逻辑运算符的操作对象为
boolean
,所以如果操作对象不为boolean
类型时,会报错
boolean b = 5 && 2; //会报错
boolean b = 5 && true; //会报错
- 短路
表达式1 && 表达式2
:当表达式1
为假时,已经可以判断出结果为假,所以不会对表达式2
进行判断,不会执行表达式2
表达式1 || 表达式2
:当表达式1
为真时,已经可以判断出结果为真,同上。
int a = 3;
System,out.println(false && a++ < 100); //此时进行了短路运算,a++ < 100没有得到执行,所以a = 3
int a = 3;
System.out.println(true || a++ < 100); //同上
三元运算符
这里的三元指的是有三个操作数,上面我们介绍的运算符的操作数要么是一个的,如++,--,!
,要么是两个的,如+,-,...
,三元运算符的格式是
变量 = 条件判断 ? 表达式1 : 表达式2;
首先会进行条件判断,如果条件判断得到的结果为true
,那么会将表达式1
的结果赋值给变量,此时表达式2
不会得到执行;否则将表达式2
的结果赋值为变量。
int a= 3;
int b = 4;
int c = 4 > 3 ? a : b++; //c = 3,表达式2没有执行,b = 4
System.out.println(b); //输出为4
注意:
- 变量的类型必须与表达式的结果的类型一致,否则会报错
int c = 4 > 3 ? 2 : 2.5; //该语句是错的,2.5是double类型,不能转化为int
可能有的人会说返回的2
,为什么会报错,因为在实际中,判断语句的结果不是确定的,否则直接将2
赋值给c
好了,根本不需要判断,因此两个表达式的结果都有可能赋值给变量,编译器会检查表达式得到的数据类型。
- 单独写三元表达式是错误的
int a = 4; b = 3;
a > b ? a : b; //这么单独写是错误的
但是可以这么写
System.out.println(a > b ? a : b); //这么写是对的