thinking in java第三章(操作符)笔记
#java
在最底层,Java中的数据是通过操作符来操作的。
使用import(静态导入)来减少代码量
在java中一条最常用的打印语句是System.out.println(“内容”);
这条语句我们所需要使用的println方法却需要经过两个类-System类的out子类中的方法。我们完全可以使用import System.out.*来静态导入
这之后就可以很快捷的使用println(“内容”);来打印而不必那么繁琐。
Java操作符
操作符接受一个或多个值用来生成一个新值
- +号
- -号
- *号
- /号
- %号
- =号
有些操作符会带来副作用(++,–),这类操作符会改变操作数自身,但它们的意义也正是在此。
几乎所有的操作符只能操作基本类型,但“=”“!=”和”==”这三种操作符能操作所有的对象!
String类支持+和+=
优先级
先乘除后加减,当不确定时应该使用括号明确规定计算顺序。
赋值
赋值使用操作符=号,它的意思是“取右值赋值给左值”。
右值可以为任何常数、变量或表达式(只要其最终代表了一个值)。但左值必须是一个明确的、已命名的变量,也就是说必须要提供一个已存在的物理空间可以存放右值。
//4 =a; 不行
a = 4;成立
对基本类型的赋值十分好理解,基本类型其实是在堆栈中存储了一个实际的数值而非一个引用指向在堆中存储的对象。所以在操作基础类型的赋值时是直接将一个地方的内容复制到了另一个地方上。
但在为**“对象”**赋值时就要十分当心了,我们在对一个已经声明的对象引用进行赋值时实际上并不是赋值对象而仅仅是赋值对象引用!
例:
Integer a = new Integer(4);
Integer b = a;
a = a-4;
print(b)//打印结果为0
这种情况可能十分容易造成混乱,因为他违反了人的第一直觉。在进行赋值最好还是直接操作基本类型避免赋值对象引用(除非有特殊需求)
一元加减运算符
一元减号可以用于对数据符号的转变,但一元的加号仅仅是为了与一元减号对应!它无法用于将负数转为正数而仅仅只能将较小类型的数提升为int。
自动递增和递减
这就是那些带来副作用的操作符的作用(++,—)
而它们又有一些些小小的区别
++i 先自身进行+1值再参与运算
i++ 先参与运算自身再进行+1值
–号一样
关系操作符(逻辑运算符)
逻辑运算符有:
- & 与
- | 或
关系操作符有 - ==相等
-
= 大于等于
- <= 小于等于
- <小于
-
大于
当且仅当逻辑运算式(逻辑运算符和关系操作符组成)成立时返回值为true,否则为false
一般常用短路与 和 短路或以此来获得潜在的性能提升(短路运算意为前一个条件计算已经确定结果后第二个条件则完全不计算跳过直接得出值)
对象的等价性
== 和 != 比较的是对象的引用
equals的默认行为也是比较引用,除非当类中重写了equals方法否则不会表现出比较内容的行为。例:String类就重写了equals方法
三元操作符if-else
格式 boolean?value1:value2;
当布尔值为true时返回值为value1,否则返回value2值
三元操作符简洁但易读性差
不建议大量使用三元操作符
字符串操作符
+和+=在字符串类中进行了重载,用来连接不同的字符串
但java程序员并不能自己实现操作符的重载。
如果一个表达式以一个字符串起头,那么后面所有的操作数都必须是字符串类型。