操做符定义
操做符(也叫作运算符)是对一个(unary)、两个(binary)或三个(ternary)操做数执行特定操做的特殊符号,而且在操做完后返回结果。java
操做符优先级
下表中是按优先级顺序列出的操做符。操做符所在行越靠上,其优先级越高。优先级较高的运算符在优先级相对较低的运算符以前进行求值。同一行上的操做符具备相同的优先级。当具备相同优先级的操做符出如今同一表达式中时,求值顺序的规则为: 除了赋值操做符以外的全部二元操做符都是从左到右进行计算的; 赋值操做符从右到左进行求值。
express
操做符功能分类及其转换规则
转换规则
在经常使用的二元操做符(如+、-、/、*、%、<、>、<=、>=、!=、==)当中,在操做数类型限于基本类型及其包装类型以内(不包括boolean和Boolean)时,那么操做符中出现的操做数优先级为double>float>long>int,即只要操做数中至少有一个是这四种类型中其中之一(如两个都是选择其中更优先的),则会将另外一操做数提高为该类型(如不是该类型的状况下),如两操做数都不在这四种类型之中时,在执行操做以前会将两操做数都提高为int类型再执行操做。
也可按功能来对操做符进行分类,以下api
简单赋值操做符/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()方法)。dom
条件操做符/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)。此外,数值在计算机内存中都是以补码的形式存储,因此数字的二进制表示形式也称为“有符号的二进制补码”this
基本数据类型之间的转换
Java容许咱们将任何基本数据类型转换成别的基本数据类型(这里的基本类型是除了boolean以外的)。这里的转换能够是隐式类型转换和显式类型转换。

如上图所示,基础类型之间按照箭头指向的方向能够进行自动转换,如想要按照箭头相反的方向转换,则要进行显式强制转换。spa
涉及到一些经常使用方法
方法 |
功能 |
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)无符号整数形式返回一个整数参数的字符串表示形式。 |