共计 2665 个字符,预计需要花费 7 分钟才能阅读完成。
操作符定义
操作符 (也叫做运算符) 是对一个 (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)无符号整数形式返回一个整数参数的字符串表示形式。