在循环内部或外部声明对象 - 弹簧

时间:2015-08-26 15:49:13

标签: java spring

这里的菜鸟问题 - 我有一个方法通过Spring CrudRepository findOne()方法接受用户ID数组并设置一个公共属性。这是我目前的实施

@RequestMapping(value = "/setUsersActive/{ids}", method = RequestMethod.GET)
public String setActive(@PathVariable Long[] ids) {
for(Long id : ids) {
    User user = userRepo.findOne(id);
    user.setActive("Y");    
    userRepo.save(user);    
}

这个方法可能会接受数组中的数千个ID - 如果我要在for循环之外声明User对象,它是否会对性能产生任何影响?

User user;
for(Long id : ids) {
    user = userRepo.findOne(id);
    user.setActive("Y");        
}

感谢任何输入

4 个答案:

答案 0 :(得分:1)

除非你需要在该循环之外使用最后保存的module.exports = { autoCreatedAt: false, autoUpdatedAt: false, migrate: 'safe', schema: true, attributes: { userId: { type: 'string', primaryKey: true, unique: true, columnName: 'inum', required: true }, displayName: { type: 'string', columnName: 'displayName', required: true }, userName: { type: 'string', columnName: 'uid', required: true }, emailAddress: { type: 'email', columnName: 'mail', required: true }, phoneNumber: { type: 'string', columnName: 'phoneNumberVerified', required: false } } } 对象,否则没有理由在它之外声明它,它限制了该变量的范围。就性能而言,让Java在编译期间为您优化它。

答案 1 :(得分:1)

不,它可以转换为完全相同的字节代码,不要在这样的事情上浪费时间,JVM会做出各种奇怪的优化,以使代码尽可能快。

答案 2 :(得分:1)

在使用之前不声明局部变量是一种很好的编程习惯。

声明局部变量而不立即使用它们可能会不必要地增加它们的范围。这会降低可读性,并可能增加不必要的错误。

从性能角度来看,没有区别,因为在循环外部移动User的声明不会更早地生成对象。

答案 3 :(得分:-1)

是的,我会宣布它不在循环中,它更有效率。否则垃圾收集器必须删除整个对象,如果在循环之前声明它,则可以节省一点RAM使用量。因为只设置了对新对象的引用。