目录,更新ing,学习Java的点滴记录
目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录
操作符介绍
- 在最底层,Java中的数据是通过使用操作符来操作的
- 操作符接收一个或多个参数,并生成一个新值.参数的形式与普通方法的调用不同,但是效果是相同的.操作符作用于操作数,生成一个新值,有些操作符可能会改变操作数自身的值,这被称为"副作用"
- 操作符分类
算术操作符
- 算术运算符中+,-,*,/,%属于二元运算符,二元运算符指的是需要两个操作数才能完成运算的运算符。其中,整数除法会直接去掉结果的小数位,%是取模运算符,就是我们常说的求余数操作
- 二元运算符运算规则:
- 算术运算符中++(自增),–(自减)属于一元运算符,该类运算符只需要一个操作数。自增自减操作符这种快捷运算使编码更方便.有个小故事,在一个关于Java的演讲中,Bill Joy(Java创始人之一)声称"Java=C+±-"意味着Java已去除了C++中一些很困那而有没有必要的东西,成为了一种更加精简的语言.
- 一元操作符运算规则:
赋值操作符
- 最常见的赋值操作符就是"=",意为将等号右边数的值赋值给左边
- 扩展赋值操作符运算规则
- 赋值运算符案例
关系操作符
- 关系操作符生成的是一个boolean结果,他们计算的是操作数的值之间的关系.如果关系是真实的,关系表达式会生成true,反之为false.
- 关系运算符中等于和不等于适用于所有的
基本数据类型
,而其他比较符不适用于boolean类型. - 关系运算符一览
- 扩展点:(看不懂可以跳过)
请大家看以下代码,想一下输出是啥?
有的可能认为两个值都是47,所以认为是true,false
这就涉及到比较两个对象的实际内容是否相同了,此时必须使用所有对象都适用的特殊方法equals(),但是这个方法不适用于基本数据类型
,基本类型直接用==和!=即可
再比如,我这里自己创建了一个新的类,然后用equals进行比较呢?
如果你认为结果是true,那就错了哦
这是因为equals方法的默认行为
是比较引用.而之前的Integer类已经对equals方法进行了覆写,所以除非在自己创建的类中覆盖equals方法,否则不可能表现希望的结果
逻辑操作符
- 逻辑操作符能根据参数的逻辑关系,生成一个布尔值(true或false)
短路
:使用逻辑操作符时,会遇到一种短路现象.即一旦明确无误地确定整个表达式的值,就不再计算表达式余下部分了,这将获取潜在的性能提升- 逻辑操作符一览表
- 短路案例
按位操作符
- 按位操作符用来操作整数基本数据类型中的单个"比特"(bit),即二进制位,按位操作符会对两个参数中对应位执行布尔代数运算,并最终生成一个结果.
- 按位操作符一览
- 移位运算符:只能够用来处理整数类型(基本类型一种)
- &和|既是逻辑运算符,也是位运算符。如果两侧操作数都是 boolean 类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
条件操作符(也称三元操作符)
- 它有三个操作数,但它确实属于操作符的一种,最终也会生成一个值.
- 表达式形式:boolean-exp?value0:value1 (如果boolean-exp的结果为true,就计算value0,而且这个计算结果就是操作符最终产生的值.如果boolean-exp的结果为false,就计算value1.)
- 案例
字符串操作符+和+=
- 特殊用途:连接不同的字符串
- 案例:
第一个打印语句输出的是012而不是3,之所以这样,是因为Java编译器会将x,y和z转换成他们的字符串形式,然后连接这些字符串,而不是先把它们加到一起.
第二个打印语句会先计算x+z的值,然后进行字符串拼接
第三个打印语句中的s提前进行了拼接操作,然后使用了括号来控制表达式的赋值顺序,使得int类型变量在显示之前进行了求和操作
最后一个打印语句在今后某些地方还是挺常见的,空的字符串+一个基本类型变量,这样的话就可以自动转为String类型,这样就没必要去调用更麻烦的显式方法(Integer.toString)
操作符优先级问题
- 一览表
- 注意点:表达式里面优先使用小括号来组织,逻辑非(!)>逻辑与(&&)>逻辑或(||)