数据类型转换
当数据类型不一样时,将会发生数据类型转换。
1. 自动类型转换(从小到大byte->short(char)->int->long->float->double)
2. 强制类型转换
特点:代码需要特殊的格式处理,不能自动转换。
格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据。
3. 注意
- 强制类型转换一般不推荐使用,因为有可能发生精度损失,数据溢出问题。
int num = (int)3.99;
打印结果,精度损失,输出3。
- byte/short/char在进行数学运算的时候,都会被首先提升成为int类型,然后再计算。
- 右侧的数值大小不能超过左侧数据类型的范围。
- 布尔类型不能发生数据类型转换。
- 数据类型转换规则:从小到大自动转,从大到小强制转。
- 虽然char和short都是占16位,但是他们之间仍然需要强制转换。
运算符
运算符:进行特定操作的符号。如:+ - * / 等
表达式:用运算符连接的式子。如:a + b、a - b
1. 算数运算符
算数运算符 | |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++、– | 自增自减运算 |
当参与/运算的两个操作数是整数时,表示整数除法;否则,表示浮点数除法。
注意:整数/0会出现异常,浮点数/0会得到无限大或NaN。
“+” | 常见用法 |
---|---|
对于数值 | 加法运算 |
对于char类型 | char提升为int再进行运算 |
对于String类型 | 代表字符串连接操作,任何数据类型和字符串连接结果都会变成字符串。 |
自增自减运算 | |
---|---|
基本含义 | 让一个变量+1或者-1 |
使用格式 | ++a、a++、–a、 a– |
使用方式 | 单独使用,a++; 混合使用, b = a++ + c–; |
使用区别 | 单独使用,++a与a++无区别,混合使用,++a先自增后运算,a++先运算后自增 |
注意:常量不可以使用自增自减,如:10++,错误写法。
2. 赋值运算符
赋值运算符分为基本赋值运算符(=)和复合赋值运算符。
赋值运算符 | |
---|---|
= | 等于号,注意与数学上的等于区别,这里的=是赋值,数学上的等于写作==。 |
+= | 加等于 ,a+=1,即a=a+1 |
-= | 减等于,a-=1,即a=a-1 |
* = | 加等于 ,a*=1,即a=a* 1 |
/= | 加等于 ,a/=1,即a=a/1 |
%= | 加等于 ,a%=1,即a=a%1 |
注意:
- 只有变量才能使用赋值运算符,常量不能进行赋值
- 赋值符合运算符中隐含了强制类型转换
3. 比较运算符
比较运算符 | |
---|---|
== | 比较符号两边数据是否相等,相等结果是true |
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true |
<= | 比较符号左边的数据是否小于或等于右边的数据,如果小于或等于结果是true |
>= | 比较符号左边的数据是否大于或等于右边的数据,如果大于或等于结果是true |
!= | 不等于符号,如果符号两边数据不相等,结果是true |
注意:
- 比较运算符的结果是boolean值
- 如果进行多次判断不能连写,如:1<x<2,错误写法。
4. 逻辑运算符
逻辑运算符 | 符号 | 运算 |
---|---|---|
与(并且) | && | a&&b,a,b都为true,结果才是true,否则false |
或(或者) | ll | a ll b,a,b至少有一个为true,结果为true,两个都为false,才为false |
非(取反) | ! | !a,a为true,结果为false,a为false,结果为true |
注意:
- 与运算和或运算具有短路效果,如果根据左边已经可以判断得到最终结果,那么右边的代码剑不再执行。
- 对于1<x<2,应写成,x>1&&x<2。
5. 三元运算符
一元运算符 | 只需要一个数据就可以进行操作的运算符,如:!、++、– |
二元运算符 | 需要两个数据才能进行操作的运算符,如:四则运算、赋值 |
三元运算符 | 需要三个数据才能进行操作的运算符 |
格式:变量名称 = 条件判断?表达式a:表达式b;
流程:
首先判断条件是否成立:如果成立,将表达式a的值赋值给左侧变量,如果不成立,将表达式b的值赋值给左侧变量。
注意:
- 必须同时保证表达式a和表达式b都符合左侧数据类型的要求。
- 三元运算符的结果必须被使用。例如赋值给其他变量或者打印
6. 位运算符
位运算是直接对整数的二进制进行的运算。
位运算符 | 运算 | 范例 | 说明 |
---|---|---|---|
<< | 左移 | 3<<2=3 * 2 * 2=12 | 空位补0,被移除的高位抛弃,空缺位补0 |
>> | 右移 | 3>>1=3/2=1 | 被移位的最高位是0,右移后空位补0,最高位是1,空位补1 |
>>> | 无符号右移 | 3>>>1=3/2=1 | 被移位的最高位无论是0还是1,空位都补0 |
& | 按位与 | 6 & 3=2 | 二进制位进行&运算,只有1&1时结果是1,否则是0 |
l | 按位或 | 6 l 3=7 | 二进制位进行l运算,只有0 l 0时结果是0,否则是1 |
^ | 按位异或 | 6 ^ 3=5 | 相同二进制位结果是0,不同二进制位结果是1 |
~ | 按位取反 | ~6=-7 | 规律:~n = -n - 1 |
7. 运算符优先级
运算符有不同的优先级,所谓优先级就是表达式运算时的运算顺序。
运算符 | 结合性 |
---|---|
[ ].( )(方法调用) | 从左向右 |
! ~ ++ – +(一元运算) -(一元运算)( ) (强制类型转换) new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
l | 从左向右 |
&& | 从左向右 |
ll | 从左向右 |
?: | 从右向左 |
= += -= *= /= %= &= l= ^= <<= >>= >>>= | 从右向左 |
总结
本篇内容:
- 数据类型转换
- 运算符
下篇内容:
字符串