Size: a a a

2020 November 15

D

Dima in learn.java
и распечатка идет после фактического увеличения, но поскольку мы переприсваиваем результат пост инкремента, то i всегда 0.
источник

 P

 ‌‌Gleb Pilipets... in learn.java
А как это работает?

public class MyClass<T extends Object, U> {
  private void temp() {
     MyClass<Object[], ?> var = null;
  }
}

Тип внутри MyClass T будет как Object или как Object[] при вызове <Object[], ?>?
источник

..

... ... in learn.java
Object[] это тоже тип
источник

 P

 ‌‌Gleb Pilipets... in learn.java
Хм.., немного необычно, а extends для массива нельзя же сделать?

Тогда как ограничить generics, чтобы туда не передали массив?
источник

..

... ... in learn.java
Думаю, что лучше сделать так:
class MyClass<T> {
   T[] objects;
}
class Main {
   public static void main(String args[]) {
       MyClass<Object> o = null;
   }
}

Иначе нельзя будет использовать возможности массивов.
источник

 P

 ‌‌Gleb Pilipets... in learn.java
... ...
Думаю, что лучше сделать так:
class MyClass<T> {
   T[] objects;
}
class Main {
   public static void main(String args[]) {
       MyClass<Object> o = null;
   }
}

Иначе нельзя будет использовать возможности массивов.
Я скорее думал, как отфильтровать массивы - то есть, чтобы не передали в generics массив.
источник

M

Maxim Borisov in learn.java
разве можно делать дженерики масивы?
источник

..

... ... in learn.java
Maxim Borisov
разве можно делать дженерики масивы?
источник

..

... ... in learn.java
Maxim Borisov
разве можно делать дженерики масивы?
источник

..

... ... in learn.java
Работает
источник

n.

ns ... in learn.java
Jegors
Ко второму пункту мы имеем:
i = 0 // текущее значение i = 1
То есть, i увеличилось на 1, но после мы выполняем присваивание.
Может я не так спросил, ща попробую расписать:
мы имеем i=0  и  i=i++
то есть при первом шаге цикла i осталась 0, т.к у нас пост инкремент.
однако во временную записалось что переменная  i уже равна 1.
То есть если я правильно понял работу пост инкрементов, то при следующем обращении к переменной i, должно выдаваться уже новое значение i, равное 1.

Далее второй шаг цикла, снова видим i=i++;
Вот тут, на втором шаге, при вычислении правой части (i++), разве не должно учитываться, что значение i равно уже не 0, а 1, которое записалось во временной переменной, и присваиваться 1. А во временную переменную записываться уже 2 ?

Если нет, то тогда я не правильно себе представляю как работают пост инкременты...
источник

D

Dima in learn.java
ns ...
Может я не так спросил, ща попробую расписать:
мы имеем i=0  и  i=i++
то есть при первом шаге цикла i осталась 0, т.к у нас пост инкремент.
однако во временную записалось что переменная  i уже равна 1.
То есть если я правильно понял работу пост инкрементов, то при следующем обращении к переменной i, должно выдаваться уже новое значение i, равное 1.

Далее второй шаг цикла, снова видим i=i++;
Вот тут, на втором шаге, при вычислении правой части (i++), разве не должно учитываться, что значение i равно уже не 0, а 1, которое записалось во временной переменной, и присваиваться 1. А во временную переменную записываться уже 2 ?

Если нет, то тогда я не правильно себе представляю как работают пост инкременты...
ты правильно все понял
источник

D

Dima in learn.java
и все бы работало так, как ты ожидаешь
источник

D

Dima in learn.java
если бы было просто так:

i++;
источник

D

Dima in learn.java
но у тебя i = i++;
источник

D

Dima in learn.java
из-за чего всегда 0 будет
источник

D

Dima in learn.java
то есть увеличенная i = 1, перекрывается i = 0, потому что постинкремент на первом проходе цикла вернет 0
источник

..

... ... in learn.java
ns ...
Может я не так спросил, ща попробую расписать:
мы имеем i=0  и  i=i++
то есть при первом шаге цикла i осталась 0, т.к у нас пост инкремент.
однако во временную записалось что переменная  i уже равна 1.
То есть если я правильно понял работу пост инкрементов, то при следующем обращении к переменной i, должно выдаваться уже новое значение i, равное 1.

Далее второй шаг цикла, снова видим i=i++;
Вот тут, на втором шаге, при вычислении правой части (i++), разве не должно учитываться, что значение i равно уже не 0, а 1, которое записалось во временной переменной, и присваиваться 1. А во временную переменную записываться уже 2 ?

Если нет, то тогда я не правильно себе представляю как работают пост инкременты...
Моя гипотеза:
когда мы пишем i++ в правой части, сначала передается значение то, что в переменной в левую часть т.е. 0 на первом кругу. Потом вычисляется выражение в ходе которого i стало 1. Потом мы присваиваем 0 к i. И поэтому i не поменялось
источник

D

Dima in learn.java
int i = 0;
 for(int k = 0; k < 100; k++) {
  i = i++;
  System.out.println(i);
 }
 System.out.println(i);
источник

D

Dima in learn.java
убедитесь сами
источник