操作符定义
操作符(也叫做运算符)是对一个(unary)、两个(binary)或三个(ternary)操作数执行特定操作的特殊符号,并且在操作完后返回结果。
操作符优先级
下表中是按优先级顺序列出的操作符。操作符所在行越靠上,其优先级越高。优先级较高的运算符在优先级相对较低的运算符之前进行求值。同一行上的操作符具有相同的优先级。当具有相同优先级的操作符出现在同一表达式中时,求值顺序的规则为: 除了赋值操作符之外的所有二元操作符都是从左到右进行计算的; 赋值操作符从右到左进行求值。
操作符功能分类及其转换规则
转换规则
在常用的二元操作符(如+、-、/、*、%、<、>、<=、>=、!=、==)当中,在操作数类型限于基本类型及其包装类型之内(不包括boolean和Boolean)时,那么操作符中出现的操作数优先级为double>float>long>int,即只要操作数中至少有一个是这四种类型中其中之一(如两个都是选择其中更优先的),则会将另一操作数提升为该类型(如不是该类型的情况下),如两操作数都不在这四种类型之中时,在执行操作之前会将两操作数都提升为int类型再执行操作。
也可按功能来对操作符进行分类,如下
简单赋值操作符/Simple Assignment Operator
操作符 |
功能 |
= |
Simple assignment operator |
算术运算符/Arithmetic Operators
操作符 |
功能 |
+ |
Additive operator (also used for String concatenation) |
- |
Subtraction operator |
* |
Multiplication operator |
/ |
Division operator |
% |
Remainder operator |
一元操作符/Unary Operators
操作符 |
功能 |
+ |
Unary plus operator; indicates positive value (numbers arepositive without this, however) |
- |
Unary minus operator; negates an expression |
++ |
Increment operator; increments a value by 1 |
-- |
Decrement operator; decrements a value by 1 |
! |
Logical complement operator; inverts the value of a boolean |
比较和关系操作符/Equality and Relational Operators
操作符 |
功能 |
== |
Equal to |
!= |
Not equal to |
> |
Greater than |
>= |
Greater than or equal to |
< |
Less than |
其中==和!=操作符不光适用于所有基本类型,还适用于所有引用类型的变量,但当其用于引用类型的变量时比较的是两个引用类型是否指向相同的对象或者都指向null。要想比较两个对象中的内容是否相同,则需要通过重写继承自Object的equals方法(同时还要重写hashCode方法,详见effective java),例如Integer中的equals和hashCode方法就是重写了的,因为Object中的equals方法用的还是==。
ps:关于hashCode,Object中的hashCode方法是为不同的对象返回出了不同的哈希值,虽然按照约定上没必要这样做(约定参看api的hashCode()方法)。
条件操作符/Conditional Operators
操作符 |
功能 |
&& |
Conditional-AND |
|| |
Conditional-OR |
? : |
Ternary (shorthand forif-then-else statement) |
类型比较操作符/Type Comparison Operator
操作符 |
功能 |
instanceof |
Compares an object to a specified type |
按位和移位操作符/Bitwise and Bit Shift Operators
操作符 |
功能 |
~ |
Unary bitwise complement |
<< |
Signed left shift 左移,低位补0 |
>> |
Signed right shift 右移,若符号为正(0),高位插0,符号为负(1),高位插1 |
>>> |
Unsigned right shift 无符号右移,高位插0(无论符号位为正(0)还是负(1)) |
& |
Bitwise AND 与 |
^ |
Bitwise exclusive OR 异或 |
| |
Bitwise inclusive OR 或 |
其中^、&、|可以对整数及其对应的包装类型进行按位操作,也可以对布尔类型及其包装类型进行按位操作(因为boolean类型在编译后是使用int类型来代替的,javap后可以看到false用0代表,true用1代表),并且避免了使用逻辑或和逻辑与时会出现的短路现象。
移位操作符可对整数进行移位,如果对于char、byte、或者short类型的数值进行移位处理,那么在移位处理之前,他们会被先转换为int类型,并且得到的结果也是一个int类型的值。但对long类型的数值进行移位处理后,得到结果还是一个long类型的数值。这正符合了前面锁介绍的转换规则。
注意:移位运算符的右操作数只有低5位是有效的,也就是说最多移位31位(即11111)。即a<<b等价于a<<(b%32),a>>>=b等价于a>>>=(b%32)。此外,数值在计算机内存中都是以补码的形式存储,所以数字的二进制表示形式也称为“有符号的二进制补码”
基本数据类型之间的转换
Java允许我们将任何基本数据类型转换成别的基本数据类型(这里的基本类型是除了boolean之外的)。这里的转换可以是隐式类型转换和显式类型转换。
如上图所示,基础类型之间按照箭头指向的方向可以进行自动转换,如想要按照箭头相反的方向转换,则要进行显式强制转换。
涉及到一些常用方法
方法 |
功能 |
Math.random()或者new Random(long seed).nextDouble() |
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。 |
new Random(long seed).nextInt(int n) |
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。 |
Integer.toBinaryString(int i) |
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。