关于这段Java代码的问题,为什么按原样编写
我偶然发现了这段源代码,并希望确保我理解为什么它是按原样编写的(或者它是否应该是这样编写的):关于这段Java代码的问题,为什么按原样编写,java,set,bitwise-or,Java,Set,Bitwise Or,我偶然发现了这段源代码,并希望确保我理解为什么它是按原样编写的(或者它是否应该是这样编写的): boolean-modified=false; Set possibleSites=settings.getPossibleSites(); Set visibleSites=settings.getVisibleSites(); modified=someMysiousMethod(); //从不在可能站点中的可访问站点中删除站点 修改后的|=可见站点。保留(可能站点); 我对上一次发言的问题是:
boolean-modified=false;
Set possibleSites=settings.getPossibleSites();
Set visibleSites=settings.getVisibleSites();
modified=someMysiousMethod();
//从不在可能站点中的可访问站点中删除站点
修改后的|=可见站点。保留(可能站点);
我对上一次发言的问题是:
这意味着如果
modified
或retainal()
为真,则modified
应为真。(这在给定名称时是有意义的。retainal
仅在Set
更改时返回true,而someMystiousMethod
可能返回true或false,具体取决于Set
的状态是否更改。)
该守则分为:
modified = modified | visibleSites.retainAll(possibleSites);
查看以下代码以查看布尔运算的|
结果:
System.out.println(true|true);
System.out.println(false|true);
System.out.println(true|false);
System.out.println(false|false);
输出:
true
true
true
false
(只有false | false
将返回false
,因此在代码中,modified
和retainal
都必须返回false才能将modified
设置为false
)
因此,上述语句意味着,如果modified
为true或retainal
返回true,则modified
设置为true,否则,modified
的值为false的返回值指示集合是否被调用更改
返回:
true
如果此集合因调用而更改
此处,
true
表示集合已修改。复合运算符对参数执行“或”,并将其赋值回左侧。在您的案例中,这意味着如果retainal
返回true
,则将true
分配回modified
,否则保持modified
不变。根据javadoc
retainal
retunstrue
如果此集合因调用而更改
a |=b
是一种影响“a或b
”到a
结果的操作。
因此,在您的情况下,我们的想法是影响modified
语句的结果“visibleSites
在之前被修改,或者visibleSites
在此之后被retainal
”修改:
modified=someMysiousMethod()
然后,修改的可能为真,也可能为假。以下因素的影响:
修改后的|=可见站点。保留(可能站点)
如果它已经为真,则将modified
设置为真,如果其他条件成立,则将其从false更改为true(我有意说的是效果,我不是在描述实际的指令操作)
第二项声明可以写成:
if (visibleSites.retainAll(possibleSites)) {
modified = true;
}
结果是一样的。在某种程度上,这是一个品味问题。我发现原始的(使用|=
操作符)更容易阅读,因为它是一个简单的直线逻辑表达式,而不是一个控制流语句
顺便说一下,它不是“按位”运算符。Java有两个“|”和两个相应的“|=”运算符;整数之间,布尔值之间。您看过的文档吗?
boolean retainAll(Collection<?> c)
modified |= visibleSites.retainAll(possibleSites);
if (visibleSites.retainAll(possibleSites)) {
modified = true;
}