![](/img/trans.png)
[英]Performance difference between assigning value to an Array Index and assigning value to Variable in java
[英]Difference between assigning a boolean variable a value and assigning a result of a comparison in Java
我的同事们给我传递了一些代码,运行代码时出现了问题。 这是其中的一部分
boolean purchased = false;
conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
stmt = conn.createStatement();
String sql = new StringBuilder().... // some query
rs = stmt.executeQuery(sql);
while (rs.next()) {
//some code
purchased = rs.getInt("purchased") == 1;
print(" purchased:" + purchased);
}
这始终打印为购买错误。 我将这一部分更改为:
while (rs.next()) {
//some code
if(rs.getInt("purchased") == 1) purchased = true;
print(" purchased:" + purchased);
}
现在,它可以完美运行了。
注意:我的ResultSet只能有1条记录。 并且在DB中购买的是位类型,因此除了0/1之外没有其他值。
这两种书写方式有什么区别? 据我所知,两者应该以相同的方式工作。
这两种书写方式有什么区别? 据我所知,两者应该以相同的方式工作。
不,绝对不是。 在您的第一段代码中,如果rs.getInt("purchased")
返回一个非 1的值,则您将赋值为false
。
在你的第二个代码片段,一旦purchased
已被设置为true
,它保持true
的环路的其余部分。
因此,假设您的第一行的purchased
价值为1,第二行的价值为2,那么在您的第一段代码中,变量将变为true
然后为false
,但是在您的第二段代码中,变量将被设置在第一次迭代中为true
,然后在第二次迭代中未更改。
实际上,此代码等效于您的同事的代码:
while (rs.next()) {
// some code
if(rs.getInt("purchased") == 1)
purchased = true;
else purchased = false;
print(" purchased:" + purchased);
}
现在,它们的行为将相同,因为一旦设置, purchased
不会永远设置为true
。
不同之处在于,一旦变量变为true,就永远不会将其更改为false。 您需要根据方法的约定或预期的行为确定正确的方法。
您的版本似乎根本不正确。
ResultSet
有多少条记录及其对应的值?
没有while
循环(如果第一条记录返回的值是1)或ResultSet只有一条记录的值是1的话,这不会有什么不同。
第一个代码中的while
循环可能在第二个迭代中设置了false
值。 因此,在while循环的退出时间,所携带的购买价值为false
。 第二种方法是,当value为1时将购买的值设置为true,并且不会再次重置为false
(因为对于ResultSet的其他行未重置购买的值)。
希望能帮助到你 !!
我同意乔恩·斯基特 ( Jon Skeet)的观点,在您的第一个答案中,值在while循环的每次迭代中都会更改,但是在第二段代码中,布尔变量的值不会每次都更改。
我不知道您的要求,但我认为您还应该在代码中添加else部分,以将布尔值rs.getInt("purchased")
的值更改为1以外的值,因为在现有代码中,您仅使布尔值变量为true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.