在我们的一些公司项目代码中,我经常阅读以下内容:
boolean foo = Boolean.FALSE;
Run Code Online (Sandbox Code Playgroud)
除了事实上AFAIK我只需要在Java中初始化局部变量(没有像Pascal那样的随机值),而且除了我经常想要进行初始化的布尔运算之外,我在这里想念什么?为什么不:
boolean foo = false;
Run Code Online (Sandbox Code Playgroud)
我不明白.PMD和Findbugs等代码分析工具也标志着它.但为什么?
编辑:没有真正了解字节码,除了它在那里我创建了一个示例类并反编译它.Boolean.FALSE转到:
0: getstatic #15 // Field java/lang/Boolean.FALSE:Ljava/lang/Boolean;
3: invokevirtual #21 // Method java/lang/Boolean.booleanValue:()Z
6: istore_1
Run Code Online (Sandbox Code Playgroud)
"假"变种去了:
0: iconst_1
1: istore_1
Run Code Online (Sandbox Code Playgroud)
因此,在不太了解这一点的情况下,我猜更多的语句意味着更多的时间来执行所以它不仅错误而且从长远来看也更慢.
我正在使用带有 Spring Data for MongoDB 的 MongoDB 使用 Spring Boot (2.3.4) 制作一个简单的应用程序。我通常使用 @Query 注释为应用程序创建查询,它工作得很好。但是对于我想使用的聚合,我使用 Criteria 类构建了一个查询。我需要的标准是
where("primary").is(value).and("secondary").is("").
我需要主要等于“值”且次要为空的所有条目。在 MongoDB Compass 中输入的查询
{ $and: [ { primary: 'value' }, { secondary: ''} ] }
按预期工作,但是当我尝试在 Spring 中使用 Criteria 时,看起来与次要的部分已完全删除。我在主要和次要中得到任何带有“价值”的结果。这意味着空字段或其他任何内容。更换.is("")零件.regex("^$")没有帮助。
这对我来说看起来很基本,那么我在这里错过了什么?我不想用“空标志”替换空的二级,因为这感觉不对。
更新:
这是有问题的代码
Criteria crit;
if(!primary.equals(secondary)) {
crit = where("primary").is(primary.name()).and("secondary").is(secondary.name());
} else {
crit = where("primary").is(primary.name()).and("secondary").is("");
}
MatchOperation matchStage = Aggregation.match(crit);
GroupOperation groupStage = Aggregation.group("grouping").count().as("sum");
SortOperation sortStage = new SortOperation(Sort.by("_id"));
Aggregation aggregation = …Run Code Online (Sandbox Code Playgroud)