2012-07-29 57 views
4

我有一條線的工作方式類似於這樣的代碼傳遞的方法設置值,爲什麼它是不可能遞增,然後++

mrq.setId((mrq.getId()+1)); 

但是,當我試圖把它寫這樣的,

mrq.setId((mrq.getId()++)); 

它不工作,錯誤的是,Invalid argument ot the operation ++/--

這是什麼背後的技術原因是什麼?

+5

呃,因爲「mrq.getId()」不是你可以分配給的基元嗎?你不能說「mrq.getId()= 1」,要麼;) – paulsm4 2012-07-29 03:10:11

+0

相關:http://stackoverflow.com/questions/8536223/why-doesnt-integer-parseint1-work-in-java – 2012-07-29 03:54:51

+0

相關:http ://stackoverflow.com/questions/4651615/in-java-why-cant-i-write-i-or-i – 2012-07-29 03:55:40

回答

4

遞增運算符需要一個字段或變量。評估getId()不會導致id字段;它返回值getId()返回的副本(通過「複製」我的意思是原始類型的文字副本和參考類型的新參考)。 getId()可能會在內部實現爲return id;,但您不會收回該字段id,它只是其值的副本。

最接近的相當於int i = getId(); setId(getId() + 1); return i;,但您要求很多允許getId()++作爲此類表達式的語法糖。

3

x++基本上等同於x = x + 1,這是沒有意義的,你的情況:

mrq.getId() = mrq.getId() + 1 
1

++運算符用於將變量的值增加1.所以a++被視爲a=a+1。這意味着它所使用的操作數將是分配完成的地方。

當你編寫mrq.getId()++它不會提供一個操作數變量,它可以增加,因此這是行不通的。