2013-07-23 101 views
0

我正在嘗試Class.Method()++但它不起作用。Java方法()++ VS方法()+ 1

簡單的例子:

Person類

public class person { 
    private int age; 

    public void age(int value) { 
     this.age = value; 
    } 
    public int age() { 
     return this.age; 
    } 
} 

在主類

發言之後得到一個錯誤約p1.age()++

public static void main(String[] args) { 
    person p1 = new person(); 
    p1.age(p1.age()++); // Get an error 
} 

但低於正常工作:

public static void main(String[] args) { 
     person p1 = new person(); 
     p1.age(p1.age()+1); // It works fine 
    } 

的主要問題:

爲什麼p1.age()++得到錯誤,但p1.age()+1不?

P.S:

我知道我能做到這一點:

person p1 = new person(); 
    int myAge = p1.age(); 
    p1.age(myAge++); 
+0

您是否試過'(p1.age())++'而不是? –

+0

@MehdiKaramosly沒有嘗試,但即使這樣做,它會是如此可怕的代碼... –

+1

作爲一個方面:[你確定'P1。年齡(myAge ++);'會工作](http://stackoverflow.com/questions/7911776/what-is-x-after-x-x)? – Arjan

回答

6

因爲

x++; 

是短期的

x = x + 1; 

,並在您案例將是

p1.age() = p1.age() + 1; // ERROR 

並且您不能在任務的左側有一個方法調用。

+5

不是很'x = x + 1'會評估爲x的新值,'x ++'評估爲舊的x值。 – sepp2k

+0

'x ++'和'x = x + 1'不*完全等價。有些情況下第一次編譯,第二次沒有。 – arshajii

+0

在聲明中使用x ++時,可以將其視爲返回x,然後將變量x遞增1.不能將常量(如方法返回值)增加1。 – MathSquared

3

method()++意味着method() = method() + 1

,因爲你不能爲其賦值方法

0

++這是不對的,你使用的方式,是一個後綴運算符。 它將使用該值,然後將其增加。

方法返回一個值。不是一個價值。

Java Language Specification

後綴表達式的結果必須是這樣的類型是可兌換(§5.1.8),以數字類型,或編譯時發生錯誤的變量。

0

p1.age返回一個值,但增量操作符++讀取該值並嘗試分配它。方法不能在Java中進行分配,因此會出現編譯器錯誤。