2013-06-10 2 views
1
public class F { 
    int test(int e) { 
     System.out.println("ok"); 
     return e; 
    } 

    public static void main(String[] args) { 
     int y = 8; 
     F f = new F(); 
     int i = f.test(y++); 
     System.out.println(i); 
    } 
} 

Выход этой программы 8, что и я ожидаю.Путаница с оператором инкремента

public class Sa { 
    public static void main(String[] args) { 
     int i = 8; 
     i++; 
     System.out.println(i); 
    } 
} 

Для этой программы, выход 9, что удивительно: почему мы получаем разные значения, используя одни и те же ценности и тот же оператор инкремента в обеих программах?

+0

Пожалуйста, внесите свой вопрос. –

+0

Вы можете сделать следующее: 1) попытаться использовать точку останова для отладки; 2) google; 3) сделайте свой вопрос лучше. На нынешнем посту практически нет никаких усилий. –

ответ

5

y++ post-increments. Это означает, что он увеличивает после выражение вычисляется.

При запуске

i=f.test(y++) 

то значение, передаваемое в метод испытания является один прежде, чем приращение имело место.

В вашем другом примере кода i++ оценивается сам по себе, поэтому приращение происходит перед println.

Изменение кода в первом образце ++y и вы должны получить 9.

+0

спасибо за помощь – user2461149

1

i++ является postincrement оператор, который означает, что он вычисляет текущее значение I, а затем увеличивает после использования.

Я ожидал бы

int i = 8 
System.out.println(i++); 
System.out.println(i); 

напечатает 8 затем 9.

Вы могли бы иметь в виду ++i что прединкремента

0

у ++ пост-инкремент.

Он передает значение и затем увеличивает его. Таким образом, вы получаете предыдущее значение до приращения.

Во втором случае вы печатаете увеличенное значение.

0

y++ в

i=f.test(y++) 

оценивается после того, как метод test() запускается. Таким образом, тест получает значение 8 и печатает 8.

Приращение его в Sa классе равно:

i++; //  is equal to i+=1  OR i = i + 1; 

Но это не то, почему мы используем приращение (++). Целью этого является побочный эффект, который он имеет в выражении.

Точно в вашем примере вы хотите передать в 8, но увеличивайте его до 9 после выполнения test.

Смежные вопросы