java a++和++a的區(qū)別是什么,讓我們一起了解一下?
java a++和++a的區(qū)別是a++先參與程序的運(yùn)行,后賦值+1給變量a,++a先賦值+1給變量a,后參與程序的運(yùn)行。相同點(diǎn):都是幫當(dāng)前變量 +1。
舉個(gè)例子來說:
public?static?void?main(String[]?args)?{ ????????int?a?=?1; ????????System.out.println(a++);??//?先參與程序的運(yùn)行,而后才進(jìn)行賦值,所以輸出為??1; ????????System.out.println(a);????//?上一步操作已經(jīng)+1;?所以輸出為?2; ????????System.out.println(++a);??//?先進(jìn)行賦值(先+1),后參與程序的運(yùn)行,所以輸出為?3; ????}
實(shí)際應(yīng)用:
1、設(shè)想一個(gè)背景
在完成DRP項(xiàng)目的一個(gè)添加功能時(shí),主鍵通過id生成器自動(dòng)控制。當(dāng)所有的代碼完成后,執(zhí)行添加時(shí),報(bào)錯(cuò)了“java.sql.SQLException: ORA-00001: 違反唯一約束條件(DRP1.PK_T_CLIENT)”,意思是要插入的主鍵值已存在。
2、查看控制主鍵的代碼
value?=?rs.getInt("value");??//從記錄主鍵值的表中獲取當(dāng)前的value值 modifyValueField(conn,tableName,value++);??//將加1后的value值更新到表中
3、分析
從代碼中可能大家都看出來了,關(guān)鍵就在value++這個(gè)參數(shù)。
java中的運(yùn)算符有前置++ 和后置++,二者是有區(qū)別的。
Int a =1;
i=a++;? 表示先將a的值賦值給i,然后a自身再加1。? ?計(jì)算結(jié)果為:i=1,a=2
i=++a; 表示a先自加1,然后再賦值給i。? ? ? ? ? ? ? ? ? ? 計(jì)算結(jié)果為:i=2,a=2
所以,實(shí)際上傳入的參數(shù)value++的值還是原來的值,這就必然導(dǎo)致插入重復(fù)的主鍵值。將參數(shù)改成++value 或者在傳參之前先進(jìn)行一次value++,然后直接傳value參數(shù)都是對(duì)++的正確應(yīng)用。
代碼表示:
value?=?rs.getInt("value");??//從記錄主鍵值的表中獲取當(dāng)前的value值 ? ?modifyValueField(conn,tableName,++value);??//將++value作為參數(shù)傳遞 ? 或者 ? value?=?rs.getInt("value");??//從記錄主鍵值的表中獲取當(dāng)前的value值 ? value++;??//vaue值自增1 ? modifyValueField(conn,tableName,value);??//將新的value值更新到表中
其實(shí),這是一個(gè)基礎(chǔ)問題,在寫代碼的時(shí)候總是會(huì)出現(xiàn)a++(常見的for循環(huán)中),寫習(xí)慣了會(huì)導(dǎo)致這里上來就寫a++?,F(xiàn)在,回頭看一下那段代碼,是我們經(jīng)常容易出錯(cuò)的。
int?a[]?={1,2,3,4,5}; for(int?i=0;?i以上就是小編今天的分享了,希望可以幫助到大家。