2014-11-01 22 views
0

Я не понимаю, почему это работает, и я надеюсь, что кто-нибудь может объяснить это мне. Вот пример:Почему я могу создать несколько экземпляров с тем же именем в цикле?

TestObject array[] = new TestObject[10]; 
for(int i= 0; i <= 10; i++){ 
    TestObject object = new TestObject(); 

    object.setValue(i); 
    array[i] = object; 
    System.out.println(array[i].getObject()); 
} 

Почему я могу создать несколько экземпляров «TestObject» с тем же именем в цикле? Обычно вы не можете создавать экземпляры с таким же именем:

TestObject o = new TestObject(1); 
TestObject o = new TestObject(2); 

Ну, это, очевидно, выдает ошибку ...

+0

Возможный дубликат [Объявление переменных внутри или вне цикла] (http://stackoverflow.com/questions/8803674/declaring-variables-inside- или-вне-петли) – Whymarrh

ответ

3

Область для for цикла ограничивается итерации. Таким образом, на каждой итерации создается и уничтожается TestObject object.

+0

Спасибо за ответ! Но я сохраняю каждый экземпляр объекта TestObject в глобальном массиве. Они все еще имеют одно и то же имя в массиве? –

+0

Вы фактически не храните имена объектов. Вы храните ссылки на объекты. Если вы заглянете внутрь массива, вы увидите массив уникальных объектов с уникальными ссылками. – Khalid

0

Это потому, что «объект» находится в области видимости текущей итерации цикла, поэтому для следующей итерации может быть инициализирован новый с тем же именем (другая область).

2

Каждая итерация цикла представляет собой блок и, как блок, имеет свой собственный объем. Вы можете добиться такого же результата, выполнив следующие действия:

{ 
    int i = 0; 
} 
{ 
    int i = 1; 
} 
// etc 
0

Это проблема с объектом. каждая итерация имеет свою область действия, скажем, они не являются одним и тем же объектом вообще