记录依次关于Integer特性引发的bug:
数据库的表有id以及parent_id字段,后续会生成一个树型的List结构。
首先原来的关键代码如下:root节点是0.
public <T extends TreeNode> List<T> build(List<T> treeNodes, Object root) {
List<T> trees = new ArrayList<>();
for (T treeNode : treeNodes) {
if (root.equals(treeNode.getParentId())) {
trees.add(treeNode);
}
for (T it : treeNodes) {
if (it.getParentId()==treeNode.getId() ){
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.add(it);
}
}
}
return trees;
}
这种方法的bug是如果id大于127以后,这个id的子节点都不会得到,这是因为在比较的时候使用==来进行判断,而Integer缓存了常用的-128-127的值,所以在这个区间使用 = =来做判断没有问题,他们的内存地址一样。
所以把= =修改成使用equals来判断就行。