【Java学习笔记】【基础篇】05.运算符

运算符

Java支持如下运算符:

  • 算术运算符:+,-,*,/,%,++,--
  • 赋值运算符:=
  • 关系运算符:>,<,>=,<=,==,!=,instanceof
  • 逻辑运算符:&&,||,!
  • 位运算符:&,|,^,~,>>,<<,>>> (了解)
  • 条件运算符:?:
  • 扩展赋值运算符:+=,-=,*=,/=

1.二元运算符

①整数运算:

long a = 123123123L;
int b = 123;
short c = 10;
byte d = 8;

System.out.println(a+b+c+d);  //Long,操作数有一个为Long,则结果也为Long
System.out.println(b+c+d);    //int,操作数没有Long,即使操作数全为short,byte,结果也为int
System.out.println(c+d);      //int

②浮点运算:

float a = 3.1415F;
double b = 3.1415;
float c = 1.1232131F;

System.out.println(a+b);  //double,操作数有一个为double,则结果为double
System.out.println(b+c);  //double
System.out.println(a+c);  //float,操作数都是float,则结果才为float

③关系运算:

int a = 10;
int b = 20;

System.out.println(a>b);  //false
System.out.println(a<b);  //true
System.out.println(a==b); //false
System.out.println(a!=b); //true

④取模运算

int a = 21;
int b = -10;
int c = 9;
int d = -9;
System.out.println(a%b);  //1,正数%负数=正数
System.out.println(a%c);  //3,正数%正数=正数
System.out.println(b%c);  //-1,负数%正数=负数
System.out.println(b%d);  //-1,负数%负数=负数

2.一元运算符

①自加自减运算:

int a = 3;
int b = a++; //a先给b赋值,b=3,再自增。
int c = ++a; //a先自增,再给c赋值。

System.out.println(a);  //5
System.out.println(b);  //3
System.out.println(c);  //5

②幂运算:

int a = 3^2; //注意:java中不能这么处理,^是异或符号。
//正确方法:
double a = Math.pow(2,3);
System.out.println(a);  //8.0

3.逻辑运算符:

举例:

boolean a = true;
boolean b = false;
System.out.println("a && b:" + (a&&b));      //&&:逻辑与运算符,当且仅当两个变量都为真,结果才为true
System.out.println("a || b:" + (a||b));      //||:逻辑或运算符,两个变量有一个为真,结果为true
System.out.println("!(a && b):" + !(a&&b));  //!:true变为false,false变为true
输出:
a && b:false
a || b:true
!(a && b):true

短路运算:从左到右计算,如果判断结果确定则不会再计算下去。

int a = 5;
boolean b = (a < 4)&&(a++ < 4);
System.out.println(a);  //5,证明a++并没有计算
System.out.println(b);  //false

4.位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。

操作符 描述
& 如果相对应位都是1,则结果为1,否则为0
| 如果相对应位都是0, 则结果为0,否则为1
^ 如果相对应位相同,则结果为0,否则为1
~ 按位取反
<< 按位左移运算符(相当于乘2)
>> 按位右移运算符(相当于除2取商)
>>> 按位右移补零操作

例如:

A = 0011 1100
B = 0000 1101
-------------
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011    
A << 2 = 1111 0000 = 240    //向左移动两位    
B >> 2 = 11 即3             //向右移动两位
A >>> 2 = 0000 1111 = 15    //向右移动后补0

常见面试题:

int a = 2 * 8怎样运算效率最快?
答:System.out.println(2<<3);
//在系统中运算是以二进制的形式进行的。相比来说两个二进制数相乘运算比移位运算慢一些。

5.扩展运算符

扩展运算符 用法举例 等效表达式
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b

6.字符串连接符

“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。

int a = 1;
int b = 2;
System.out.println("" + a + b);  //12
System.out.println(a + b + "");  //3

7.三元运算符

语法格式:

x ? y : z

其中x为boolean类型表达式,若x为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。

例如:

int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println("type = " + type);   //及格

8.运算符优先级

优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 <<、>>、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、<<=、>>=、>>>= 从右向左
posted @ 2022-04-08 13:02  AmazingMing  阅读(65)  评论(0)    收藏  举报