BitSet.valueOf在fromString方法中的作用及代码解析
详解
BitSet.valueOf(new long[] { Long.parseLong(s, 2) })的功能 嘿,我来帮你把这行代码拆解得明明白白的!咱们从内到外一步步看,再结合你给的完整示例来理解它的作用:
1. 拆解代码的每一部分
Long.parseLong(s, 2):这部分的作用是把二进制字符串s转换成long类型的数值。比如你示例里的"1000001",用这个方法转换后,得到的是十进制的65(对应的二进制就是1000001)。第二个参数2指定了解析的进制是二进制。new long[] { ... }:把刚才得到的long值放到一个长度为1的数组里——因为BitSet.valueOf()方法需要接收一个long数组作为输入参数。BitSet.valueOf(...):这是BitSet的静态工厂方法,它会根据传入的long数组来创建一个BitSet实例。数组里每个long的每一位,都会对应到BitSet中的一个位:long的最低位(第0位)对应BitSet的索引0,long的第1位对应BitSet的索引1,以此类推。
2. 结合示例代码理解实际作用
在你的示例里,fromString方法就是用这行代码把二进制字符串转成BitSet:
- 当输入是
"1000001"时,Long.parseLong得到65(二进制1000001),然后BitSet.valueOf会创建一个BitSet,其中索引0和索引6的位是1(对应二进制字符串的最右边和最左边的1),其他位默认是0。 - 示例里的
toString方法刚好是反向操作:用bs.toLongArray()[0]把BitSet转成long值,再用Long.toString(...,2)转回二进制字符串,这样就能还原出原来的输入。
3. 为什么要这么做?
BitSet是Java里专门用来高效处理位操作的工具类,比直接用字符串处理位运算要高效得多。比如示例里的bits2.and(bits1),就是对两个BitSet执行按位与操作,对应到二进制字符串就是"1111111" & "1000001" = "1000001",结果完全符合预期。
这里要注意一个小细节:如果你的二进制字符串长度超过64位(long的最大位数),那就要用更长的long数组来处理,但你的示例里都是短字符串,所以用长度为1的数组就足够了。
内容的提问来源于stack exchange,提问作者learner101
相关产品推荐
相关产品推荐

