一、运算符种类
- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
二、算术运算符
+ - * / %
++,--
(也叫一元运算符)
int a = 10;
int b = 3;
System.out.println("a+b="+a+b);//结果为102
//直接用+号是拼接字符串
System.out.println("a+b="+(a+b));//结果为12
//进行运算的括号拼起来
System.out.println("a-b="+a-b);//报错
//字符串只能相加拼接,不能相减
System.out.println("a-b="+a*b);//相乘运算
//乘法优先级高,所以先算乘法,在进行字符串拼接
System.out.println("a-b="+a/b);//相除运算
//除法优先级高,所以先算除法,在进行字符串拼接
double c = 3.0;
System.out.println("a/c="+a/c);//结果为3.333
//进行运算的两个数都为整型,结果也为整型,如果有一个是浮点型,结果就为浮点型
//但是会近似运算
System.out.println("a/c="+a*1.0/b);//结果为3.333
System.out.println("a/c="+a/b*1.0);//结果为3.0
//根据运算优先级,从左往右运算
System.out.println("a%b="+a%b);//结果为1
System.out.println("a%c="+a%c);//结果为1.0
下面是运行结果
需要注意
整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果。
三、关系运算符
> < >= <= == !=
- ==和equals的区别
四、位运算符
&:按位与,都1为1,有0为0 |:按位或,有1为1,都0为0 ^:按位异或,不同为1,相同为0 ~:按位非,按照8位二进制,高位是符号 负数在计算机中以补码存储,负数的补码=反码+1 非运算过程:取反--求反码--转原码--转十进制 <<:左位移 >>:右位移 >>>:无符号右移五、逻辑运算符
&&:与,同真为真,有假则假 ||:或,一真为真,都假为假 !:非,取反 ^:异或,不同为真,相同为假。两边一样就是假,两边不一样是真 1. 短路原则: &&:与运算,前面假直接返回,不进行后面判断 ||:或运算,前面真直接返回,不进行后面判断 2. 不短路情况: 前提是两边为表达式,如果两边为数字就是位运算符 &:不考虑前者,一定会执行后者 |:不考虑前者,一定会执行后者六、赋值运算符
= += -= *= /= %=
<<=左移位赋值运算符
>>=右移位赋值运算符
&=按位与赋值运算符
^=按位异或赋值操作符
|=按位异或赋值操作符
- 使用赋值运算符有一点需要注意
例如:+=,其内部自动包含了强制转换
byte x1 = 10;
byte x2 = 3;
x1 = x1 + x2;//报错,不兼容的类型,int不能转到byte
x1 += x2;//等价于a=(byte)(a+b);自动帮你强转
System.out.println("x1=" + x1);
换句话说,Java有个默认的数据类型,在运行过程中涉及到类型转换,默认都转换为默认数据类型
比如:byte类型相加,编译器认为两个byte相加,127+127大于byte的范围,就会将结果转换为int(不是short,转换为默认数据类型),所以结果就为int,就会报错。
七、其他运算符
1. 三元运算符
补充内容 一元:自增自减和非运算 二元:两个数的运算操作(加减乘除,与或等)
表达式1 ? 表达式2 : 表达式3
int a = 10; a>5?return true:return false;
2. instanceof 运算符
测试它左边的对象是否是它右边的类的实例,返回boolean
的数据类型。
主要在用在多态上,判断左边对象是否是右边的实例
八、优先级
算术>比较>逻辑 括号>一元>非>乘除>加减>移位()
>a++
>++a
>!
>* /
>+ -
>>>
关于优先级更多的是使用括号,通常情况下不需要记住所有运算符的优先级顺序,只需记住常用的几个就可以
标签:运算,System,运算符,println,byte,out
From: https://www.cnblogs.com/wanghycoder/p/17237699.html