七夕,一波波狗粮,一波波情话,过了;
周末,一波波敌人,一波波海浪,也过了。
是时候放下你心里的那个对象好好工作了。
工作开始了,你是把你的对象放一旁了,但是你确定你把你的“对象”放对位置了吗?
这次我们聊聊把“对象”放错位置的后果。
前几天有一位同事需要做与我一样的功能,而这个功能是我已经开发好了的,他只需直接把我的代码拿去修改就可以。结果,我的代码可以正常运行,他的代码在开启服务之后,控制台就不断有日志输出,开发环境进入了死机状态。
在我们不懈地努力之下,最终发现了问题:他把一个对象的创建放在了循环体外。
以下是代码重现
//在循环外部创建对象
List<Item> itemListOut_t1 = new ArrayList<>();
//创建中间对象 item_t1
Item item_t1 = new Item();
for (Item itemIn : itemListIn) {
item_t1.setItemId(itemIn.getItemId());
item_t1.setItemName(itemIn.getItemName());
itemListOut_t1.add(item_t1);
}
//在循环内部创建对象
List<Item> itemListOut_t2 = new ArrayList<>();
for (Item itemIn : itemListIn) {
//创建中间对象 item_t2
Item item_t2 = new Item();
item_t2.setItemId(itemIn.getItemId());
item_t2.setItemName(itemIn.getItemName());
itemListOut_t2.add(item_t2);
}
运行结果如下:
通过控制台可以很容易地看出来,在循环外部创建对象是错误的,在循环内部创建对象是正确的。
产生出两种不同输出效果的原因如下:
在循环外部创建对象,使得循环内部一直使用同一个对象,虽然 itemListIn 循环了三次,item 也被三次添加到 itemListOut_t1,但是三次都是同一个对象,换句话说,最后 itemListOut_t1 得到的三个对象是相同的。
而在循环内部创建对象,循环内部使用的是三个不同的对象,最后 itemListOut_t1 得到三个不同的对象。
以下是相关文章链接:
以下是本次话题讨论:
1.你是否也遇到过上面的问题或者类似上面的问题?你当时是怎么找到问题的?又是怎么解决的?
2.你是否还有其他因为放错位置而引发各种问题的经历?你是怎么解决的?