Java Scope: возврат объекта, созданного внутри метода - это опасно?

Я учусь в классе Java и сегодня узнал кое-что о Java, что заставило меня повернуться. Когда я спросил учителя, как и почему, он не был уверен в поведении. Может ли кто-нибудь объяснить, почему работает следующий пример?

class Example {
    public int ex_val;

    public Example (int a) {
        this.ex_val = a;
    }

    public int getExVal () {
        return this.ex_val;
    }
}

Если бы мне пришлось создать экземпляр «Example» внутри метода другого класса и «вернуть» объект, он мог бы успешно выпрыгнуть из своей исходной области видимости и использоваться впоследствии.

class ParentObject {
    // Instance Variables    
    public Example a;

    public ParentObject (int number) {
        // Initialize instance variable object from out-of-scope instantiation
        this.a = genExample(number);

        // Verify scope creep
        System.out.println(this.a.getExVal());
    }

    public Example genExample (int a) {
        return new Example(a);
    }
}

Это ДЕЙСТВИТЕЛЬНО работает, но стабильно ли такое поведение? Могу я на это рассчитывать? Может ли сборщик мусора переключаться между оператором возврата одного метода и оператором присваивания вызывающей функции? Подвержен ли я риску сбоя из-за версии JVM в моей ОС? Эта функция кажется удобной, если на нее можно положиться.

7
задан Dan Davies Brackett 1 February 2012 в 22:44
поделиться