&字符的使用方法

JAVA中的&字符的使用方法

&是JAVA中的与运算符。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

&&还具有短路功能(前面提到的),即如果第一个表达式为false,则不再计算第二个表达式,

举个例子:

if(str != null && !str.equals(“”))
//当str为null时,后面的表达式不会执行,所以不会出现NullPointerException
//如果将&&改为&,则会抛出NullPointerException异常。

& 也可以进行按位与操作,按二进制位进行"与"运算。

举个例子:

最近学习hadoop的时候学习了自定义Partition的方法。在mapreduce中 分区过程中通过类HashPartitioner<K,V> implements Partitioner<K,V> 来实现相同的key 的value 会分配到同一个reduceTask中,其中有一段很有意思的代码,如下:

public int getPartition(K2 key, V2 value, int numReduceTasks) { 
//重点看return后面的代码
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
//该代码主要是为了根据key的hashcode返回一个分区号。
}

一开始我没有想到 & 字符在这里的作用,实际上&字符在这里是用于做位运算的。

Integer.MIN_VALUE=2147483647 转换成二进制值是:

0111 1111 1111 1111 1111 1111 1111 1111

key.hashCode() & 2147483647 可以保证结果是非负数,原因在于当key.hashCode()为负数时,第一位一定是1,此时1 & 0结果为0,这样就会使符号位一定为0了。

这里同时也要注意,HashPartitioner类返回的int值必须是一个整数,不然就无法对指定的键值对进行分区,也就无法在下一步进行Map操作了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值