Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295

Не много не понятно

11.06.2013, 10:59. Показов 3269. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот например код:

int temp = 0 ;

for(int i = 0 ; i < 60; i++){
i+=i;
}

а есть другой :

for(int i = 0 ; i < 60; i++){
int temp = i;
}

Правильно ли я понимаю , то что у меня во 2 примере 60 раз создастся переменная типа int с именем temp? или же если
такое имя уже есть просто будет использоваться таже самая локальная переменная ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2013, 10:59
Ответы с готовыми решениями:

Не много не понятно (dynamic_cast)
Вот например есть 2 класса: #include &lt;iostream&gt; class One { }; class Two : public One

На руках много ОЗУ а что ставить не понятно
Всем привет! Какую кофигурацию подобрать? Имею: материнская плата ASUS P5B Deluxe в книжке от нее сказанопро память: &quot;4x DIMM,...

Лучшие ресурсы для изучения ассемблера. Чтоб было легко и понятно,чтоб было не много текста или говора
Лучшие ресурсы для изучения ассемблера. Чтоб было легко и понятно,чтоб было не много текста или говора. Потому что в этом случае учить...

42
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
11.06.2013, 13:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Care Посмотреть сообщение
Значит такой код будет более оптимальным?:
эти 2 кода полностью идентичны и нет необходимости утаскивать переменную из блока наверх в паскалевском стиле
(я щя не помню но по моему когда я сам тестил эти 2 кода давали одинаковый байткод)
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
11.06.2013, 13:07
Цитата Сообщение от Care Посмотреть сообщение
так как я понял что во 2 примере у меня все таки насоздастцоооо аж 20 переменных ,которых как я понял не увижу но они будут)

Добавлено через 1 минуту
пока конечно не придет GC
Нет. Будет одно место в стеке. Вне зависимости от того, объявили Вы переменную перед циклом или внутри него.
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
11.06.2013, 13:14
Цитата Сообщение от Skipy Посмотреть сообщение
При вызове метода на стеке (!) резервируется 4 байта под переменную.
насколько я помню примитивные типы на стеке кешируются (надо бы проверить)

Добавлено через 7 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 *
 * @author mutagen
 */
public class StackHeapTst {
 
    void stake(int count) {
        for (int i = 0; i < count; i++) {
            int j = i;
        }
    }
 
    void heape(int count) {
 
        int j = 0;
        for (int i = 0; i < count; i++) {
            j = i;
        }
    }
}
а вот его байткод
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Compiled from "StackHeapTst.java"
public class StackHeapTst extends java.lang.Object{
public StackHeapTst();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
void stake(int);
  Code:
   0:   iconst_0
   1:   istore_2
   2:   iload_2
   3:   iload_1
   4:   if_icmpge       15
   7:   iload_2
   8:   istore_3
   9:   iinc    2, 1
   12:  goto    2
   15:  return
 
void heape(int);
  Code:
   0:   iconst_0
   1:   istore_2
   2:   iconst_0
   3:   istore_3
   4:   iload_3
   5:   iload_1
   6:   if_icmpge       17
   9:   iload_3
   10:  istore_2
   11:  iinc    3, 1
   14:  goto    4
   17:  return
 
}
в 1 случае цикл
Java
1
2
3
4
5
6
7
2:   iload_2
   3:   iload_1
   4:   if_icmpge       15
   7:   iload_2
   8:   istore_3
   9:   iinc    2, 1
   12:  goto    2
во втором
Java
1
2
3
4
5
6
7
4:   iload_3
   5:   iload_1
   6:   if_icmpge       17
   9:   iload_3
   10:  istore_2
   11:  iinc    3, 1
   14:  goto    4
ЧТД - абсолютно одинаковый байткод
1
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
11.06.2013, 13:14  [ТС]
Спасибо... Просто тут видно что мы явно при каждый интерации объявляем новую переменную... значит переменная объявляется 1 раз (в самом начале цикла) вне зависимости в цикле она или нет...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
11.06.2013, 13:15
Цитата Сообщение от mutagen Посмотреть сообщение
эти 2 кода полностью идентичны и нет необходимости утаскивать переменную из блока наверх в паскалевском стиле
(я щя не помню но по моему когда я сам тестил эти 2 кода давали одинаковый байткод)
Ну да, код одинаковый.

Java
1
2
3
4
5
6
        int k;
        for(int j=0; j<10; j++){
            k = j;
            k*=2;
            System.out.println(k);
        }
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 0 iconst_0
 1 istore_2
 2 iload_2
 3 bipush 10
 5 if_icmpge 27 (+22)
 8 iload_2
 9 istore_1
10 iload_1
11 iconst_2
12 imul
13 istore_1
14 getstatic #3 <java/lang/System.out>
17 iload_1
18 invokevirtual #4 <java/io/PrintStream.println>
21 iinc 2 by 1
24 goto 2 (-22)
27 return
Java
1
2
3
4
5
        for(int j=0; j<10; j++){
            int k = j;
            k*=2;
            System.out.println(k);
        }
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 0 iconst_0
 1 istore_1
 2 iload_1
 3 bipush 10
 5 if_icmpge 27 (+22)
 8 iload_1
 9 istore_2
10 iload_2
11 iconst_2
12 imul
13 istore_2
14 getstatic #3 <java/lang/System.out>
17 iload_2
18 invokevirtual #4 <java/io/PrintStream.println>
21 iinc 1 by 1
24 goto 2 (-22)
27 return
Меняется только нумерация переменных, т.к. они в коде в разном порядке появились.
1
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
12.06.2013, 17:18  [ТС]
Ещё 1 вопрос :
Если же вы говорите что разницы нету и это:
Java
1
2
3
4
5
int temp = 0 ;
 
for(int i = 0 ; i < 60; i++){
i+=i;
}
и это :
Java
1
2
3
for(int i = 0 ; i < 60; i++){
int temp = i;
}
Одинаковы

то почему я не смогу сделать так :
Java
1
2
3
4
for(int i = 0 ; i < 60; i++){
int temp = i;
}
System.out.println(temp);
или так :
Java
1
2
3
4
    while(true){
            int d = 20;
        }
     System.out.println(d);
но смогу так :
Java
1
2
3
4
5
6
    int d = 0;
        while(true){
             d = 20;
             break;
        }
     System.out.println(d);
Добавлено через 1 минуту
Ведь loop не являеться методом ... и вроде как видно состоит не из 1 инструкции
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
12.06.2013, 17:18
заканчивается область видимости, за пределами своих { } она "кирдык"
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.06.2013, 17:22
Цитата Сообщение от Care Посмотреть сообщение
Или же все таки имена хроняться не в стеке?
Имена вообще не хранятся в самой программе, не путай этап компиляции с этапом исполнения.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
12.06.2013, 17:24  [ТС]
Но почему ? Ведь mutagen сказал что нету разницы ... Оба варианта находятся в одном методе , а область видимости оперделяеться метод? Эта переменная(с 1 примера) находиться в том же фрейме ,что и переменная во в 2 примере...

Добавлено через 1 минуту
Под фремом я подразумеваю область метода ,где хранятся его все локальные переменные...
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
12.06.2013, 17:25
хорошо, к примеру у вас метод с циклом for (int i = .......) { } .... вы сможете ПОСЛЕ цикла обратиться к i ? нет... то же самое и тут
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
12.06.2013, 17:27  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
Имена вообще не хранятся в самой программе, не путай этап компиляции с этапом исполнения.
Но на этапе исполнения они же есть (ссылки)... ?

Добавлено через 1 минуту
Цитата Сообщение от tankomaz Посмотреть сообщение
хорошо, к примеру у вас метод с циклом for (int i = .......) { } .... вы сможете ПОСЛЕ цикла обратиться к i ? нет... то же самое и тут
Значит loop это метод?)) И поэтому мы не можем к ней обратиться?) Вот я и о том же)Мне не много не понятно )
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
12.06.2013, 18:13
http://www.ibm.com/developerwo... nt/#N101BE
Это к вопросу "имеет ли смысл выносить объявление переменных до цикла". Разницы по скорости 100% не будет, я проверял и так и эдак.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
12.06.2013, 18:29  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
Это к вопросу "имеет ли смысл выносить объявление переменных до цикла". Разницы по скорости 100% не будет, я проверял и так и эдак.
Тут уже о другом... Как циклы реализованы в Java ? По байт коду видно что в конце всегда стоит безусловный оператор (я конечно не спец ,но вроде во всех языках так реализованы циклы, с помощью goto) . Так вот почему переменная опеределённая внутри цикла не доступна вне цикла... О том что разницы в скорости нету это понятно... Но если вы объявите переменную внутри цикла , то вне цикла к ней доступа нету... Хотя это все выполняеться в 1 методе ! То есть 1 локальные переменные...

Получаеться что в Java циклы реализованы как методы и при вызове начала цикла в стек попадает новый метод
и по этому мы не можем получить переменные определенные в цикле , так как они находятся в не видимости ...
Может я не прав??
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
12.06.2013, 18:35
вы слышали такое понятие "область видимости"? почитайте про это раз так несколько, вы задаете одни и теже вопросы. Ну и что что в одном методе, "наверх" переменная не доступна из "нижней" области видимости метода... тоже самое что переменные класса (вне методов) видны в методах, НО не наоборот
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
12.06.2013, 18:37
Я не могу сказать за все языки, но только про objective-c - там тоже переменная, объявленная в теле цикла видна только в нем. Внезапно, правда?

Выше человек правильно написал про { }. Я могу ошибаться, но эти брекеты и определяют область видимости переменной. Если объявил, например, в блоке IF {} переменную то она НЕ будет видна за пределами этого блока.
Имхо все логично.
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
12.06.2013, 18:38
Цитата Сообщение от verylazy Посмотреть сообщение
Я не могу сказать за все языки, но только про objective-c - там тоже переменная, объявленная в теле цикла видна только в нем. Внезапно, правда?

Выше человек правильно написал про { }. Я могу ошибаться, но эти брекеты и определяют область видимости переменной. Если объявил, например, в блоке IF {} переменную то она НЕ будет видна за пределами этого блока.
Имхо все логично.
полностью вас поддерживаю, эти "брекеты" именно и определяют область видимости переменной
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
12.06.2013, 18:54  [ТС]
Возможно... Но я читаю книгу и тут говориться что видимость переменной определяеться методом , но цикл НЕ МЕТОД .... И НЕ КЛАСС
На счет видимости почитаю...

Добавлено через 7 минут
Цитата Сообщение от Care Посмотреть сообщение
Возможно... Но я читаю книгу и тут говориться что видимость переменной определяеться методом , но цикл НЕ МЕТОД .... И НЕ КЛАСС
На счет видимости почитаю...
Видимость локальных переменных ****
ЗЫ Правка не пашет...
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
12.06.2013, 18:55
открывайте в конце книги - должна быть фамилия переводчика, это ваш враг с этого дня. Метод, класс....забудьте, помните правило "брекетов" )

{ } - ваши друзья!

а чтобы лучше запомнилось - Класс имеет {}
class Example {
}

метод имеет {}

class Example {
void doIt() {

}
}
1
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
12.06.2013, 19:15
Цитата Сообщение от Care Посмотреть сообщение
Возможно... Но я читаю книгу и тут говориться что видимость переменной определяеться методом , но цикл НЕ МЕТОД .... И НЕ КЛАСС
что делает? говорится, определяется

Ну и если немного придираться (что делать? что сделать?) то можно сказать что видимость переменной определяется методом, все правильно. Объявил переменную в методе - там она и видна. И во всех вложенных в этот метод блоках if, case, циклах и т.д. тоже видна. А за пределами метода - нет.

Господи... 4 страницы одно и тоже. Говоришь три месяца учишь джаву?
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
12.06.2013, 19:49  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
что делает? говорится, определяется
Ну и если немного придираться (что делать? что сделать?) то можно сказать что видимость переменной определяется методом, все правильно. Объявил переменную в методе - там она и видна. И во всех вложенных в этот метод блоках if, case, циклах и т.д. тоже видна. А за пределами метода - нет.
Господи... 4 страницы одно и тоже. Говоришь три месяца учишь джаву?

На счет этого я просто спросил ,возможно я не правильно понял .. и что? Если не нравиться проходите мимо я спрашиваю тех кто более опытнее меня , а не тех кто клонирует объекты от воздуха...

Добавлено через 3 минуты
Цитата Сообщение от tankomaz Посмотреть сообщение
открывайте в конце книги - должна быть фамилия переводчика, это ваш враг с этого дня. Метод, класс....забудьте, помните правило "брекетов" )

{ } - ваши друзья!

а чтобы лучше запомнилось - Класс имеет {}
class Example {
}

метод имеет {}

class Example {
void doIt() {

}
}
Это я все знаю... Просто мне хотелось по глубже капнуть ... Ладно надо с АСМой по играться не много и узнать как это реализовано внутри языка... Просто думал мне хоть кто то даст прямой ответ ....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2013, 19:49

как i двигается понятно но вот не понятно как это делает j ?
Здравствуйте, вопрос очень глупы но все же есть цикл for (int i = 0,j = 0; i &lt; source.length; i++) как i двигается понятно но вот не...

Аппаратные ключи. Их много. Как привязать к дистрибутивам, которых тоже много
Начну с вводных данных: имеется: 1) гора дисков 1С 7.7 торговля+склад (предположительно не сетевые). На каждом диске стоит какой-то...

Хочу один системник и много-много мониторов+клавиатур+мышей. Как?
Вопрос: как реализовать возможность одновременной работы на одном системнике нескольким людям одновременно (человек 5-6), т.е. системник...

Что лучше: 1 цикл и много действий или много циклов и 1 действие?
Есть n количество данных. Есть m количество действий. Задание надо выполнить m действий с каждой единицей данных n. По сути решения 2: 1)...

Сравнить две таблицы с разнородной информацией (много к много)
Есть две таблицы, Т1 своего рода &quot;задание&quot;, Т2 как бы &quot;результат&quot;. Задача: Выявить поля в &quot;результатах&quot; не соответствующие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru