【Java编程思想】3.操作符

在最底层,Java 中的数据都是通过使用操作符来操作的。


3.1 静态导入

import static com.xxx.... // 可直接引入包中的方法

3.2 使用 Java 操作符

  • 几乎所有操作符智能操作基本类型。
  • 例外的‘=’,‘==’,‘!=‘,能操作所有对象。
  • String 类支持’+‘,’+=‘.

3.3 优先级

  • 先乘除,后加减。
  • 多用括号,少歧义。

3.4 赋值

’=‘赋值操作符:

  • 取右边的值,赋给左边的值。
  • 右边可以是任何常数,变量或者表达式。
  • 左边必须是一个明确的,已命名的变量。

对于赋值,又区分为:

  • 基本类型的赋值:
    基本类型存储了实际的数值,而非指向一个对象的引用。是直接将一个地方的内容复制到另一个地方。
  • 对象的赋值:
    真正操作的是对象的引用,是将“引用”从一个地方复制到另一个地方。

关于别名的问题:

  • 将一个对象的引用 t1 直接赋值给另一个对象 t2 后,t1 会随着 t2 的变化而变化,因为赋值的是引用,两个变量实际指向了相同的对象。这种现象被称为“别名”。
  • 将一个对象传递给方法时,也会产生别名问题。

3.5 算数操作符

Ramdom 类:随机数生成器,对于特定的种子值总会产生相同的随机数序列(所以实际上是伪随机)。


3.6 自动递增和递减

  • 递增:++;递减:--
  • 前缀-->先执行计算,后生成值;后缀-->先生成值,后执行计算

3.7 关系操作符

关系操作符生成 boolean 结果

’==‘/’!=‘适用于所有对象,比较的是对象的引用,就是说即使值相同,但是不同对象的话也是不同的。在比较不同的对象的相同值时,使用 equals() 方法。
由于 equals() 的默认行为是比较引用,除非在自己的新类中覆盖 equals() 方法,否则不可能表现出我们希望的行为。这是重写 equals() 方法的意义。


3.8 逻辑操作符

与:&&
或:||
非:!
逻辑操作符生成 boolean 结果

在应该使用 String 值的地方使用 boolean 值,布尔值会自动装换为适当文本形式的 true/false(装箱)。

短路:一旦能够明确无误的确认整个表达式,就不会在计算表达式剩余的部分。


3.9 直接常量

numbers + L --> long
numbers + F --> float
numbers + D --> double
0x/0X + numbers --> 十六进制
0 + numbers --> 八进制

值得注意的是计算机中 e 代表10的幂次。


3.10 按位操作符

按位操作符用来操作整数积累数据类型和中的单个“比特”(bit),即二进制位。
按位操作符会对两个参数中对应的位执行布尔代数运算。

按位与:&
按位或:|
按位异或:^
按位非:~

按位操作符可与等号(=)联合使用。&=,!=,^=都是合法的。


3.11 移位操作符

操作二进制的“位”,只可以用来处理整数基本类型数据。

  • 左移<<:按操作符右侧指定的位数,将操作符左边的操作数左移动(低位补0)
  • 右移>>:按操作符右侧指定的位数,将操作符左边的操作数右移动(符号拓展,符号为正,高位插0;符号为负,高位插1)
  • 无符号右移>>>:无论正负,高位插0

按位操作符可与等号(=)联合使用。<<=,>>=,>>>=都是合法的。


3.12 三元操作符

boolean-exp ? value0 : value1;

3.13 字符串操作符 + 和 +=

如果表达式以一个字符串开头,那么后续所有操作数都必须是字符串类型。


3.14 使用操作符时常犯的错误

多用括号不出错


3.15 类型转换操作符

执行类型转换,可以将希望得到的数据类型治愈圆括号内,放在要进行类型转换的值的左边

  • 窄化转换:编译器会强制进行转换
  • 扩展转换:新类型一定会容纳原来的类型的信息

float/double --> int 总会进行截尾
如果想要得到舍入的结果,需要调用 java.lang.Math 中的 round() 方法

对基本类型执行算术运算或者按位运算,只要比 int 小,在运算前,这些值会自动转换为 int。
float * double = double
int + long = long


3.16 Java 中没有 sizeof

所有数据类型在任意机器上的大小都是相同的-->高可移植性

原文地址:https://www.cnblogs.com/chentnt/p/9791847.html