Size: a a a

2020 November 07

АZ

А - Z in learn.java
ns ...
Да, уже разобрался. Спс.
Я не знал что присвоение, указанное в sout, тоже перезаписывает значение переменной.
Я думал sout просто выводит значение в консоль и все.
А тут оказывается что у переменной перезаписывается значение...
Скажу проще чем человек выше :
//а=2/
/ b =3
print(a +=b )

Джава очень умная и умеет считать, т.к. код в дужках не имеет кавычек ! - делается вычисление
a = a + b
//a = 5
После того как жаба посчитала - выполняется ф-ция print()

Как в математике вообщем, шо в дужках -- сделать первым
источник

АZ

А - Z in learn.java
ns ...
Да, уже разобрался. Спс.
Я не знал что присвоение, указанное в sout, тоже перезаписывает значение переменной.
Я думал sout просто выводит значение в консоль и все.
А тут оказывается что у переменной перезаписывается значение...
Он бы просто вывел значение в консоль если бы ты  передал вместо  выражения (a+=b)  просто (а)
источник

АZ

А - Z in learn.java
Было бы очень тупо со стороны java вывести выражение а после этого посчитать.
Мы же считаем деньги перед касой магазина чтоб хватило?
Мы не тычем касирше все что у нас есть , а она пускай там дальше ебется
источник

АК

Артём Карташов... in learn.java
ns ...
Вот теперь я точно запутался
извиняюсь что так долго, но думаю поможет если не поздно
источник

А

Алексей in learn.java
Dmtr Klkv
Так работают все вызовы методов в java. Сначала будет выполнено то, что в скобках, а результат будет передан в метод.
Не только в java. Я, даже, не назову язык, где будет иначе
источник

GV

Gukov Viktor in learn.java
Dmtr Klkv
Так работают все вызовы методов в java. Сначала будет выполнено то, что в скобках, а результат будет передан в метод.
System.out.println(i++);
источник

..

... ... in learn.java
Gukov Viktor
System.out.println(i++);
инкремент это совсем другое дело
источник

GV

Gukov Viktor in learn.java
... ...
инкремент это совсем другое дело
Нет, просто утверждение "Сначала будет выполнено то, что в скобках, а результат будет передан в метод." некорректное
источник

..

... ... in learn.java
Code:

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

Compile:

Success!

Result:

0
источник

DK

Dmtr Klkv in learn.java
Просто Виктор любит до*баться. 😆
источник

..

... ... in learn.java
Gukov Viktor
Нет, просто утверждение "Сначала будет выполнено то, что в скобках, а результат будет передан в метод." некорректное
а какое утверждение насчет этого повода будет верным?
источник

АZ

А - Z in learn.java
Gukov Viktor
Нет, просто утверждение "Сначала будет выполнено то, что в скобках, а результат будет передан в метод." некорректное
Ну я же имел ввиду без приоритета действий))))))
источник

DK

Dmtr Klkv in learn.java
Я думаю, что инкремент i++ тоже выполняется раньше вызова метода, просто сама запись означает: верни текущее значение, а потом увеличь. А ++i работает наоборот.
источник

DK

Dmtr Klkv in learn.java
На сколько я помню, инкремент i++ и на уровне инструкций процессора работает не так как i+1. Хотя я давно многопоточность не трогал, может и ошибаюсь.
источник

АZ

А - Z in learn.java
Пост++ круче ++пре)
источник

GV

Gukov Viktor in learn.java
... ...
а какое утверждение насчет этого повода будет верным?
Любые абсолютные утверждения находятся в JLS
В данном конкретном случае это "выполнение выражения" (expression evaluation)

When an expression in a program is evaluated (executed), the result denotes one of three things:

1. A variable (§4.12) (in C, this would be called an lvalue)
2. A value (§4.2, §4.3)
3. Nothing (the expression is said to be void)

If an expression denotes a variable, and a value is required for use in further evaluation, then the value of that variable is used. In this context, if the expression denotes a variable or a value, we may speak simply of the value of the expression.

Evaluation of an expression can produce side effects, because expressions may contain embedded assignments, increment operators, decrement operators, and method invocations.


В данном случае стоит обратить внимание на последнее предложение. Более подробно здесь:
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html
источник

i

i think it's okay in learn.java
Ребят,
а зачем вплетать в java-код - groovy-код?
источник

N🌌

Nazarii 🌌 in learn.java
Dmtr Klkv
На сколько я помню, инкремент i++ и на уровне инструкций процессора работает не так как i+1. Хотя я давно многопоточность не трогал, может и ошибаюсь.
i++ не атомарно
источник

MY

Mikhail Yakunin in learn.java
i think it's okay
Ребят,
а зачем вплетать в java-код - groovy-код?
У меня однажды на работе был такой кейс, перепоставки новой версии программы заказчику было очень долгим, а программа занималась разбором некоторых xml документов, формат которых часто менялся, груви не надо компилить поэтому при смене формата документа просто отсылались заказчику новые груви скрипты, которые он подкладывал в определённую папку и все работало, остальная программа была написана на джаве.
источник

GV

Gukov Viktor in learn.java
Dmtr Klkv
Я думаю, что инкремент i++ тоже выполняется раньше вызова метода, просто сама запись означает: верни текущее значение, а потом увеличь. А ++i работает наоборот.
Да, все верно.
Для кода
        int i = 1;
       System.out.println(i++);


будет следующий байт-код:
  public static void main(java.lang.String[]);
   Code:
      0: iconst_1
      1: istore_1
      2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      5: iload_1
      6: iinc          1, 1
      9: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
     12: return


По шагам 5-9 можно заметить, что сначала загружается значение переменной и только потом она увеличивается, непосредственно перед вызовом метода.
Конкретно в моем случае я придрался, к фразе результат будет передан в метод. Это не всегда так
источник