JAVA中的运算符
Java语言支持如下运算符:
算术运算符:
算数运算符包括: | |
---|---|
+ |
加法运算,字符串连接运算 |
- |
减法运算 |
* |
乘法运算 |
/ |
除法运算 |
% |
取模运算,两个数字相除取余数 |
++ -- |
自增自减运算 |
赋值运算符:=
关系运算符:
比较运算符包括 |
|
---|---|
== |
比较符号两边数据是否相等,相等结果是true。 |
< |
比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> |
比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= |
比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。 |
>= |
比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。 |
!= |
不等于符号 ,如果符号两边的数据不相等,结果是true。 |
Instanceof |
逻辑运算符:
逻辑运算符包括: | |
---|---|
&& 短路与 |
1. 两边都是true,结果是true 2. 一边是false,结果是false 短路特点:符号左边是false,右边不再运算 |
` | |
! 取反 |
1. ! true 结果是false 2. ! false结果是true |
位运算符:&
,|
,^
,~
,>>
,<<
,>>>
(了解!!!)
条件运算符:?
扩展赋值运算符:+==
,-=
,*=
,/=
算术运算符
自增运算符:+``+
自减运算符:--
以上两种运算符可以称为一元运算符(因为他们可以一个数进行加减的变化)
- 先
++
/--
:执行代码前,先自增,再赋值。 - 后
++
/--
:先赋值,代码执行后,再自增。
public static void main(String[] args) {
int a=3;
int b=a++;
//执行这行代码后,先给b赋值,再自增。
System.out.println(a);//4
int c=++a;
//执行这行代码前,先自增,再给b赋值。
System.out.println(a);
//a=5
System.out.println(b);
//b=3
System.out.println(c);
//c=5
}
扩展:很多运算,我们都会使用一些工具类来操作。
double pow = Math.pow(2,3);
//Math.pow 幂运算
System.out.println(pow);//8 2^3
注意:
再多个操作中,有一个数为比int大的数据类型,则数据结果就为改类型,如果没有比int打的数据类型大的数,结果都为int.
小建议:当整数相除的时候,建议把其中一个整数转换成double类型
public static void main(String[] args) {
long a=123456789L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
}
关系运算符
关系运算符的结果为:false,true 是一个布尔值
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 布尔值
int a=10;
int b=20;
int c=20;
System.out.println(a>b);//fasle
System.out.println(a<b);//true
System.out.println(b==c);//rue
}
逻辑运算符
&&
(与),||
(或),!
(非:取反)
逻辑与运算&&
:两个变量都为真,结果才为true
逻辑或运算||
:两个变量其中一个为真,则结果才为真
!
取反:结果如果是真,则为假,如果是假则为真
public static void main(String[] args) {
boolean a=true;
boolean b=false;
System.out.println("a&&b:"+(a&&b));
System.out.println("a==b:"+(a==b));
System.out.println("!(a&&b):"+!(a&&b));
}
注意事项
- 与“
&&
”和或“||
”有短路效果:如果根据左边已经可以判断出最终结果,那么右边的代码将不会执行 - 逻辑运算符只能用于
boolean
值。 - 与、或需要左右各一个布尔值,但是取反只要有一个的一个布尔值即可。
- 与、或、两种运算符,如果多个条件,可以连续写。
int c=5;
boolean d=(c<4)&&(c++<4);
System.out.println(d);//false
System.out.println(c);//5
位运算符:
&
:需要都为1结果才是1,否则就为0
|
:有一个为1结果就是1,其他时候为0
^
:相同为0,不相同为1
public static void main(String[] args) {
/*A=0011 1100;
B=0000 1101;
A&B=0000 1100
A|B=0011 1101;
A^B(异或)=0011 0001;
~B(取反)=1111 0010
*/
}
面试题:
2*8怎么运算最快
答:int a=2<<3
>>左移 /2
<<右移 *2
扩展赋值运算符
不建议使用
public static void main(String[] args) {
int a=10;
int b=20;
a+=b;//a=a+b;
a-=b;//a=a-b;
System.out.println(a);
}
扩展:
字符串连接符:+
在加号的两侧只要出现了String类型,他就会其他都转换成String再进行连接
- 如果String是在前面,后面的会拼接,
- 如果String在后面,前面的就不会进行拼接,该干嘛干嘛
面试题
System.out.println(a+b+"");和System.out.println(""+a+b);有什么区别?
public static void main(String[] args) {
int a=10;
int b=20;
a+=b;//a=a+b;
a-=b;//a=a-b;
System.out.println(a);
System.out.println("=====");
System.out.println(a+b);
System.out.println(""+a+b);//1020
System.out.println(a+b+"");//30
//1.在加号的两侧只要出现了String类型,他就会其他都转换成String再进行连接
//2.如果String是在前面,后面的会拼接,
// 如果String在后面,前面的就不会进行拼接,该干嘛干嘛
}
三元运算符
- 三元运算符格式:
int i = (1==2 ? 100 : 200);
数据类型 变量名 = 布尔表达式? true: flase
三元运算符计算方式:
- 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
- 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
public static void main(String[] args) {
int i = (1==2 ? 100 : 200);
System.out.println(i);//200
int j = (3<=4 ? 500 : 600);
//条件判断语句? true:flase
System.out.println(j);//500
}