欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java中 a_java中 a++ 和 ++a

发布时间:2024/4/19 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java中 a_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

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

}

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

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

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

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

总结

以上是生活随笔为你收集整理的java中 a_java中 a++ 和 ++a的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。