首页 > 代码库 > java基础--------运算符与类型转换
java基础--------运算符与类型转换
运算符
运算结果 低精度向高精度靠拢 如 Long+float=double
常量整形默认 int 没有声明数据类型的整形默认为int 如: 123 在编译器会默认将它识别为(int)123
常量实型默认 double 。。。 如 1.2345 。。。 double (1.2345)
Short i=3; i=i+1; 丢失精度 ----> short 变量=short 变量 +(int)1
运算符优先级
优先级:++ 变量名 > = > 变量名++
前自增的优先级比赋值符高,赋值符比后自增的优先级高;
C=++b; 分解 b=b+1; -->c=b;
C=b++; 分解 c=b; -->b=b+1;
(1)算术运算符
正号+ 负号- 加号+ 减号- 乘号* 除号/ 取模%
前自增++ 后自增++ 前-- 后-- 字符串连接符+
(2)赋值运算符
= += -= *= /= %=
(3)比较运算符
> >= < <= == !=
(4)逻辑运算符
& :true&true ->true
... ->false
| :false|false ->false
... ->true
^ :false^true ->true
... ->false
! : !false ->true
!true ->false
&和&&,| 和 || 的区别
&和 | 先判断符号左右两边真假后得出结果
&&和 || 先判断符号左值判断真假后考虑是否直接得出结果
(5)三目运算符
(条件)? (语句1) : (语句2)
!!!三目运算符的运行结果是一个常量,不能直接当成语句结束换行
(6)其他运算符
位运算符,位移运算符 等等
类型转换
(1)。自动转换(隐式转换):系统自动转换
低精度向高精度进行转换
(2)。强制转换(显式转换):手动转换
高精度向低精度进行转换
Byte ->short -> int -> long -> float -> double
short -> int -> long -> float -> double
int -> long -> float -> double
long -> float -> double
float -> double
隐式转换
反向即显示转换
这里就有个问题:为什么64位的long型可以转换为32位的float的浮点型呢?
博主刚刚查阅的深入理解java虚拟机,原话是64位的long和double在java虚拟机中占两个局部变量空间,而其他数据类型只占用一个。
so 这个问题貌似还没有解决,有能解决的大神也欢迎来指点一二。
强转会丢失精度
32位转16位时,如果32位的数据类型中存放的16位数,在强转的时候情况如下
+0000000000000001111111111111111 ----->这是一个32位整型数的二进制存放形式,前16位是1
-1111111111111111 ->强制转换后16位数 ------>这是转换后的16位数,符号位+对应的0 -对应的1就不重复了
都知道Short的取值范围是-2的15次方到2的15次方-1,在强制转换的过程中32位整形的前十六位会丢失,而刚好符号位在转换前是有数据的。
so 你看到的转换前是一个正的整型数 在转换后变成了一个负的短整型。
java基础--------运算符与类型转换