Java基础回顾(二)——运算符
运算符可以分成以下几组:
- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
算术运算符(可以对常量和变量进行操作)
算数运算符为“+”、“-”、“*”、“/”、“%”、“++”、“–”,分别指“加”、“减”、“乘”、“除”、“取余”、“自增”、“自减”,共七种。
-
特殊情况
- 特殊一: 两个整数相除得到的还是整数 ,小数部分会略去。如果想要得到小数,需要将其中一个数转成浮点数。
- 特殊二: 在乘除法中,若其中一个数为浮点类型,则相乘或相除获得值为浮点类型。
- 特殊三: 使用浮点数做运算的时候的不精确性。
-
- 原因: double 和 float两个类型在java中本身就是非精确存储的,再用两个近似值去做计算,得到的结果就只能是一个近似值。
- 特殊四: 可以使用+对 字符串进行组拼,任何类型和字符串相加都会把数据转成字符串,再进行组拼
- 特殊五: 使用 字符做算术运算的时候,会自动把字符转换成对应的数字,然后进行数学运算
自增和自减运算符
- 前缀自增自减法(++a,–a) 先进行自增或自减运算,再进行表达式运算
- 后缀自增自减法(a++,a–) 先进行表达式运算(加减乘除等), 再进行自增或自减运算
关系运算符
Java支持的关系运算符有六种,分别是“==”、“!=”、“>”、“<”、“>=”、“<=”。其作用是判断是否为真。为真时返回true值,为假时返回false值。
-
注意区分 == 和 =
-
System.out.println(a==b); //判断a是否等于b
System.out.println(a=b);//b赋值给a
位运算符
位运算符有七种,分别是“&”、“|”、“^”、“~”、“<<”、“>>”、“>>>”。位运算符多用于二进制运算。
- &: 按位与 => 1、1为1
- |: 按位或 => 0、0为1
- ^: 按位异或 => 相同为0
- ~: 按位取反 => 0变1,1变0
- <<: 按位左移 => 往左移几位。如A<<2,则A所对应的二进制数往左移2位。
- >>: 按位右移 => 往右移几位。如A>>2,则A所对应的二进制数往右移2位。
- >>>: 按位右移补零操作符 => 往右移几位,空位补零。如A>>>2,则A所对应的二进制数往右移2位且左边补零。
-
原码、反码和补码
- 计算机是二进制的,所有的数据使用二进制来存储。对于每个二进制来说都有原码、反码和补码。计算机存储数据的时候,使用第一位表示数字的正负,0代表正数,1代表负数。计算机存储正数的时候直接存储正数的原码,存储负数的时候存储负数的补码。(为什么存储补码,而不是原码,这个是为了方便进行数学运算)
-
- 正数: 原码、反码和补码相同。
-
- 负数:
- 原码(符号位为1)
- 反码(符号位不变,其余位数取反)
- 补码(反码+1)
- 负数:
逻辑运算符
逻辑运算符有六种,分别是“&&”、“| |”、“!”、“^”、“&”、“|”。(两个负数运算获得的结果为补码,需转为原码获得输出值)
- &&: 短路逻辑与 => 真真为真
- | |: 短路逻辑或 => 有真则为真
- !: 逻辑非 => 与条件相反,条件为true则返回false。
- ^: 异或 => 两边结果一样时为false,不一样时true。
- &: 逻辑与 => 真真为真
- |: 逻辑或 => 有真则为真
-
短路逻辑运算符
- 逻辑与的特殊情况 因为逻辑与运算符运算时,真真才为真。因此当第一个操作为假时,其结果必定为假,所以将不会再判断接下去的操作,也不会执行接下去的操作。所以称之为短路逻辑与运算符。
- 逻辑或的特殊情况 因为逻辑或运算符运算时,有真则为真。因此当第一个操作为真时,其结果必定为真,所以将不会再判断接下去的操作,也不会执行接下去的操作。所以称之为短路逻辑或运算符。
赋值运算符
Java语言支持的赋值运算符有十一种,分别是“=”、“+=”、“-=”、“*=”、“/=”、“(%)=”、“<<=”、“>>=”、“&=”、“^=”、“|=”。
-
运算方式:
-
C?=A => C=C?A;
?代表“+”、“-”、“*”、“/”、“%”、“<<”、“>>”、“&”、“^”、“|”
其他运算符
条件运算符(?:)
条件运算符也被称为三元运算符。
-
运算公式:
-
variable x = (expression) ? value if true : value if false
布尔表达式?表达式1:表达式2
公式解析: 判断x值是否等于表达式expression的值,等于输出如果为真的值(?与:之间的内容),反之输出如果为假的值(:之后的内容)。
instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
-
instanceof运算符使用格式如下:
-
( Object reference variable ) instanceof (class/interface type)
公式解析: 如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
数据类型转换
隐式类型转换
小类型到大类型会自动转换: byte->short,char->int->long->float->double
虽然float比long小,但是因为存储方法不一样导致float里面可以存储的数据范围比long要大(浮点型来说,有一部分是用来表示有效位数的,有一部分是用来表示多少次方。)
-
使用情况:
-
- 赋值语句
-
- 算术表达式中
显式类型转换(也叫做强制类型转换)
-
把一个大类型赋值给小类型,需要进行前置类型转换,如:
- int i = (int)3.3;
- long j = (long)3.4f;
- int c = ‘a’;//隐式转换