java中 a++ 和 ++a

背景:

     在完成DRP项目的一个添加功能时,主键通过id生成器自动控制。当所有的代码完成后,执行添加时,报错了“java.sql.SQLException: ORA-00001: 违反唯一约束条件(DRP1.PK_T_CLIENT)”,意思是要插入的主键值已存在。

代码:
 查看控制主键的代码
value = rs.getInt("value");  //从记录主键值的表中获取当前的value值

modifyValueField(conn,tableName,value++);  //将加1后的value值更新到表中
分析:

从代码中可能大家都看出来了,关键就在value++这个参数。

java中的运算符有前置++ 和后置++,二者是有区别的。

Int a =1;

i=a++;  表示先将a的值赋值给i,然后a自身再加1.    计算结果为:i=1,a=2

i=++a; 表示a先自加1,然后再赋值给i。                   计算结果为:i=2,a=2

所以,实际上传入的参数value++的值还是原来的值,这就必然导致插入重复的主键值。将参数改成++value 或者在传参之前先进行一次value++,然后直接传value参数都是对++的正确应用。代码表示:

value = rs.getInt("value");  //从记录主键值的表中获取当前的value值

 modifyValueField(conn,tableName,++value);  //将++value作为参数传递

或者

value = rs.getInt("value");  //从记录主键值的表中获取当前的value值

value++;  //vaue值自增1

modifyValueField(conn,tableName,value);  //将新的value值更新到表中

 

其实,这是一个基础问题,但是今天还是在这里摔了一跤,主要还是因为没有仔细区分过这个知识点。之前,在写代码的时候总是会出现a++(常见的for循环中),写习惯了导致这里上来也就写a++。现在,再回头看一下那段代码,其实,如果当时好好分析一下,估计今天这个错误也能避免了。

int a[] ={1,2,3,4,5};

for(int i=0; i<a.length; i++){

         System.out.println(a[i]);

}

 

 补充:(参考:http://blog.sina.com.cn/s/blog_6b51e9370100ya29.html)

a++和++a本质上的区别:

前置++不会产生临时对象  

后置++在返回时有一个临时对象的创建(a++ 相当与a先创建自身的一个副本,然后a自增1,最后返回副本的值)

在前置++和后置++ 效果相同的时候,最好使用前置++

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值