Java基本语法
赋值运算符=
- 符号:
=
- 当
=
两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。 - 支持连续赋值,即相同类型的变量,可以在一个语句(即一个分号内)内,通过逗号分隔,同时定义、初始化。
赋值运算符的扩展:
+=
,-=
,*=
,/=
,%=
- 注意点:不会改变变量本身的数据类型。
问题:希望变量num实现+2的操作,有几种方法?(前提:int num = 10)
- 方式一:
num = num + 2
- 方式二:
num += 2
,并且这种方式比方式一更好,因为不会改变变量的数据类型。 - 方式三:
num++++或(num++)++
,这是错误的。
- 方式一:
问题:希望变量num实现+1的操作,有几种方法?(前提:int num = 10)
- 方式一:
num = num + 1
- 方式二:
num += 1
- 方式三:
num++
,这种方式与方式二相比实际上好坏程度一样,但代码量更少一点,因此更好一点点。
- 方式一:
- 注意点:不会改变变量本身的数据类型。
赋值运算符练习
- 注意:赋值运算符的扩展并不改变数据类型,因此
i *= 0.1
不会编译出错,结果仍然是整型。 - 注意:后自增或自减是先运算再+1或-1,因此
n *= m++
时,先进行n = n * m
,再进行m = m + 1
,当然计算是这么计算的,但本质上还是有区别,都不会改变数据类型。 - 注意:
(n++)或(++n)
单独出现不是语句,即会报错。因此n += (n++) + (++n)
可以理解为n = n + (n++) + (++n)
,从左到右顺序执行且(n++)
或(++n)
无法单独执行,n + n = 20(运算)-->n = n + 1 = 11(后增)-->n = n + 1(先曾)==12--> 20 + n(运算) = 32
(前提:int n = 10)。
比较运算符
- Java中的比较运算符
- 比较运算符的结果都是
boolean
型,即要么是true
,要么是false
。 比较运算符
==
,不要误写成=
。误写是不会编译错误,当误写成赋值运算符=
时,相当于a=b
这样的表达式,其结果就是一个值(b值,反正这样赋值后,a的值等于b的值,它们值都相等),相当于表达式的结果是a值,但输出结果之前进行了将b值赋值给a的操作。该值不一定是boolean
类型。- 这说明
(a = b)
是一个表达式,会有一个结果,实际上结果就是b
。
- 这说明
> < >= <=
:只能使用在数值类型的数据之间。==
:不仅可以使用在数值类型数据之间,还可以使用在其他引用类型数据之间,比如String
。
逻辑运算符
- Java中的逻辑运算符:
- 逻辑运算符的操作对象为
boolean
类型。
在位运算符中存在与逻辑运算符中相同的符号,判断一个表达式是逻辑表达式还是位表达式,就看操作对象的数据类型。 单与(逻辑与)
&
和双与(短路与)&&
,单或|
和双或||
的计算结果是相同的,区别在于计算过程。&
与&&
的异同点- 相同点1:运算结果相同。
- 相同点2:当符号左边为
true
时,二者都会执行符号右边的运算。 - 不同点:当符号左边为
false
时,&
会继续执行符号右边的运算,而&&
不会继续执行符号右边的运算。 - 开发中,推荐使用
&&
。
|
与||
的异同点(类似于&
与&&
)- 相同点1:运算结果相同。
- 相同点2:当符号左边为
false
时,二者都会执行符号右边的运算。 - 不同点:当符号左边为
true
时,|
会继续执行符号右边的运算,而||
不会继续执行符号右边的运算。 - 开发中,推荐使用
||
。
- 面试题
位运算符
- Java中的位运算符:
- 位运算是直接对整数的二进制进行的运算,即位运算符操作的都是整型的数据,其运算结果也是整型数值。
<<
:在一定范围内,每向左移一位,相当于*2
,超过一定范围符号会变。>>
:在一定范围内,每向右移一位,相当于/2
,超过一定范围符号会变。- 面试题:最高效方式计算
2 * 8
:2 << 3
或8 << 1
。 >>
注意点:最高位为1
,即负数时,右移的空位都用1
补,最高位为0
,即正数时,右移的空位都用0
补。
理解:负数的二进制是补码,因此高位都为1就相当于正数的高位都为0。>>>
无符号右移表示,不论最高位是什么,即不论是正数还是负数,右移的空位全用0
补。也就是说,若为负数,进行无符号右移会马上变为正数。- 位运算符细节:
其他位运算符的使用
取反
~
:包括符号位在内,0
变1
,1
变0
。- 这里计算注意一下:下面一行就是6变为-6后的反码,即-6的反码,相当于求-6反码代表哪个数,首先它是负数,其次这个数+1就是-6的补码,即这个数+1是-6,因此是-7。
- 这里计算注意一下:下面一行就是6变为-6后的反码,即-6的反码,相当于求-6反码代表哪个数,首先它是负数,其次这个数+1就是-6的补码,即这个数+1是-6,因此是-7。
位运算符练习
^
操作:存在这样的规律,若m ^ n = k
,那么k ^ m = n
或k ^ n = m
。无符号右移
>>>
练习:String.toBinaryString(int i)
:返回参数i对应的二进制字符串,没有多余的高位0,即无符号二进制字符串。String.toHexString(int i)
:返回参数i对应的十六进制字符串,没有多余的高位0,即无符号十六进制字符串。