Я не ожидал, что new
не изменит переменные экземпляра, если переменные экземпляра уже назначены.Локальное использование нового ключевого слова
Правильно ли я понял?
class Foo {
String name = "Java";
}
class Main {
public static void main(String args[]) {
Foo foos[] = { new Foo(), new Foo() };
foos[0].name = "bar";
for (Foo c : foos) c = new Foo();
for (Foo c : foos) System.out.println(c.name);
for (Foo c : foos) c.name = "baz";
for (Foo c : foos) System.out.println(c.name);
}
}
Выход
bar
Java
baz
baz
В приведенном выше примере, new
работает больше как заливкой объекта к тому же классу уже он. Каково практическое применение этого поведения?
Оператор 'new' просто выполняет свою работу, которая заключается в создании новых объектов. Здесь я ничего не вижу, что требует объяснения. –
Это действительно непонятно, что вы имеете в виду здесь ... У вас есть 3 использования «нового» - из чего вы удивлены? И что это связано с локалями? Что вы ожидаете от результата? Вы удивлены тем, что 'c = new Foo();' фактически не изменяет значение в коллекции? Если это так, то это * ничего * связано с 'new'. –
Существует четыре независимые переменные 'c'. Нет переназначения, кроме первого цикла. Но это не влияет на массив. – Albjenow