运算符
运算符
算数>关系>赋值
算数运算符 不会强转 整数int 小数 double
+:拼接字符串,两端一段为字符串则拼接,结果也为字符串 算数运算:数值
-
*
/
% 取模
8.2%3.2=1.799999999999999
(float)8.2%(float)3.2=1.7999997 23位
++
++在前先自增再用变量
++在后先用变量在自增
--
关系运算符 结果为Boolean值
>
<
<=
>=
==
!=
赋值运算符
=
+= -=*=/= 隐式转换 强制转换成前面的类型 常量窄化转换
逻辑运算符 !>&&>||
& 两者为真,结果为真 两边可以跟数字进行与运算
&& 短路:当满足条件时,不在执行后面
| 一者为真,结果为真 两边可以跟数字进行或运算
|| 两边只能跟Boolean值
^ 相同为假,不同为真 两边可以跟数字进行异或运算
三元位运算 ? :
结果以大类型为准
byte<short<int<long<float<double
常量窄化转换 根据常量大小选择相应取值范围的类型
位运算
& 相同为1,不同为0
| 一个为1,则为1
^ 相同为0,不同为1
<< *2
>> /2 带符号右移正数补0,负数补1
>>> 无符号右移补0
数字转补码
Integer.toBinaryString(8);(获取数字的补码)
优先级
算数>关系>赋值
!>&&>||
javap -verbose jvm指令 转回二进制 操作系统就可执行
队列:先进先出
方法运行时数据是存在栈里的:先进后出
栈计算:栈顶两数计算并合并
jvm指令:
iconst_4 将常量4入栈(icons 1~5)
bipush 8 将常量8推入栈
istore_1 将栈顶出栈到第一个变量空间
iload_1 将第一个变量入栈
iinc 1, 2 将第一个变量+2
imul 栈顶两个数相乘,结果合并
iadd 栈顶两个数相加,结果合并
计算-6+1
10000110 -6 8位原码
01111001 反码
01111010 补码 反码+1
01111011 运算-6+1
01111010 反码 反码-1
10000101 原码
计算6*1
先将常量6和1放入栈
在调用jvm乘法指令
通过指令调用操作系统cpu计算