这里的菜鸟问题 - 我有一个方法通过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");
}
感谢任何输入
答案 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使用量。因为只设置了对新对象的引用。