首页 > 代码库 > 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基础--------运算符与类型转换