|
|
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
Господа! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А этот Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 12:09:09 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
100 умещается в байт и компилер считает что использовать int здесь расточительно. В результате после компиляции получается byte i = 100; Спасибо за вопрос. Не знал про подобные оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 12:21:35 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
Интересно так же продемонстрировать то что, не смотря на оптимизацию примитива, авотбоксинг и полиморфизм отрабатывают как надо. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 12:26:37 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
Понятно. То есть компилятор благодаря final знает, что другое число уже не будет назначено для int i, а 100 вполне поместится в byte? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 13:06:44 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
osonТо есть компилятор благодаря final знает, что другое число уже не будет назначено для int i, а 100 вполне поместится в byte? Он не только "знает", но ещё и пользуется свои знанием, действительно меняя тип в байткоде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 13:09:17 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
В реальности, если речь не идет о массиве, то в JVM и байт хранится в 4-х байтах. Все манипуляции с байтов производятся с переконвертацией в int и, при необходимости, затем обратно в байт с cast (byte). Поэтому никогда не возможно присвоить байту int или результат арифметических операций без преобразования (byte). В случае с funal, компилятор знает чему будет равно его значение в определенной точке и соотвственно, подставляет это значение. То есть запись вида Код: 1. 2. компилятором будет заменена на Код: 1. 2. А подобное присвоение, естественно, ошибок не вызывает. По этой причине, везде, где только можно, рекомендуется использовать модификатор final для переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:31:02 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
VurnТо есть запись вида Код: 1. 2. компилятором будет заменена на Код: 1. 2. Это догадки или как? Если компилировать без оптимизации, со всей отладочной инфой, то код будет final int i = 100; byte b = i; как и прежде. Если отладочную инфу выключить, то компилятор соптимизирует эти 2 переменные в одну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:50:51 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 2. Забирает из стека интовое значение и работает. Аналогично в случае без int'овой переменной. Вполне логично. Суслика видишь? нет. а он есть (с) :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 18:10:11 |
|
||
|
задачка для гуру
|
|||
|---|---|---|---|
|
#18+
Blazkowicz VurnТо есть запись вида Код: 1. 2. компилятором будет заменена на Код: 1. 2. Это догадки или как? Если компилировать без оптимизации, со всей отладочной инфой, то код будет final int i = 100; byte b = i; как и прежде. Если отладочную инфу выключить, то компилятор соптимизирует эти 2 переменные в одну. Отличие при компиляции с отладочной инфой от без нее будет лишь в том, что во втором случае i вообще не создастся, а в b сразу запишется 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 18:26:10 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34418098&tid=2146267]: |
0ms |
get settings: |
17ms |
get forum list: |
25ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
51ms |
get topic data: |
19ms |
get forum data: |
4ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 324ms |
| total: | 532ms |

| 0 / 0 |
