简要认识操作符
操作符接受一个或多个参数,操作符作用于操作数,生成一个新值,此外,几乎所有的操作符都只能作用于“基本数据类型”,此外还有操作符是“=”、“==”、“!=”,这些操作符能操作所有对象,除此以外,String类支持“+”和“+=”
优先级
当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序,最简单的规则就是先乘除后加减,
运算符的优先级往往记忆起来很生涩,使用括号明确规定计算顺序,代码可读性也会更好
注:输出语句包含“+"操作符,此时的”+“意味着字符串的连接
赋值(=)
赋值使用操作符“=",取右边的值将其赋值给左边,右值可以是任何常数、变量或者表达式,但左值必须是一个明确的、已命名的变量。
对基本数据类型的赋值很简单,基本数据类型存储了实际的数值,而并非指向一个对象的引用,但是在为对象进行赋值时,真正的操作的是对象的引用,将一个对象赋值给另一个对象,实际是将该引用指向到同一个堆空间中同一个地址
Tank类非常简单,t1和t2是它的对象实例,将t2赋值给t1后,它们指向了在堆里分配存储对象的一块相同地址(绑定了相同对象),t1之前指向的那块空间,会被回收,所以该改变t1的值,也会改变t2
这种现象称作”别名现象“,如果想避免这种现象,可以这样写:t1.level = t2.level;
这样便能保证两个对象的相对独立,而不是将t1和t2绑定在相同的对象
自动递增和递减
递减符号“--”,意为“减少一个单位”,递增操作符是“++”,这两个操作符有两种使用方式,前缀式和后缀式,前缀式先执行运算,再生成值,后缀式先生成值后执行运算
关系操作符
关系操作符生成一个boolean结果,它们计算的是操作数的值之间的关系,如果关系为真,关系表达式会生成ture,关系不为真,则生成false,关系操作符==和!=也适用于所有对象
测试对象的等价性
结果并不是ture和false,尽管对象的内容相同,然而对象对象的引用却是不同的,而==与!=比较的就是对象的引用是否指向同一个对象实体(堆空间的地址值是否相同),比较两个对象的实际内容使用equals()方法。
逻辑操作符
逻辑操作符“与“(&&)、”或”(||)、“非“(!),能根据参数的逻辑关系,生成一个布尔值true和false
逻辑运算符只能应用于布尔值,这是与C和C++所不同的地方
程序的短路
当使用逻辑操作符时,会遇到一种短路现象,即一旦能够明确无误的确定一个布尔值的情况时,就不再计算剩余部分的逻辑表达式
输出显示的结果并无test3()方法内容,test1()方法返回结果为true,所以表达式会继续执行,但test2()方法返回值为false,则返回结果必为false,所以没必要继续计算剩余的表达式,短路也能潜在的将程序性能得到提升。
按位运算符
按位操作符用来操作整数基本类型数据中的单个比特,即二进制位,按位运算符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果
首先让我们来了解一个数的二进制转化
将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零

小数

负数

位运算符


实用青年

部分内容来源Thinking in java