Вопрос по ссылкам и объектам Java

280
12 ноября 2017, 15:08

Здравствуйте. Что происходит с объектами созданными в методе. Вот пример:

public void example() {
Integer i = new Integer(4);
}

Здесь нам приспичило создать объект типа Integer, ок, но вот мы выполнили этот метод и что произойдёт после с этим объектом? Он просто удалится из stack'a и если на его нет больше ссылок кроме этой то и из heap'a?

public class Variables {
public static Variables variables = new Variables();
private ArrayList<String> arrList = new ArrayList<>();
private Variables() {}
public ArrayList getArrList() {
return arrList;
}
}
public class Human {
private String name;
public Human(String name) {
this.name = name;
Variables.variables.getArrList().add(name);
}
public void setName(String name) {this.name = name;}
}
public class Main() {
public static void main(String[] args) {
Human human = new Human("Josh");
//Теперь у нас переменная стринг "Josh" хранится и в коллекции и в поле объекта human и нам чтобы удалить этого Джоша надо удалить этот объект из коллекции Variables.variables.getArrList().remove(0); и присвоить Null human.setName(null);
}
}
Answer 1

После выполнения метода объект удалится сборщиком мусора, поскольку на него нет ссылок, вот только когда именно это произойдет неизвестно. Вы не можете влиять на это процесс, но можете рекомендовать сборщику мусора удалить ненужные объекты, вместе с тем, он сам решит какие. Делается это просто - System.gc(). Но повторюсь, что это лишь рекомендация и гарантий, что этот объект удалится именно после вызова метода нет.

Answer 2

Если напишите вот так, то будет другой смысл:

public void example() {
    Integer i = 4;
}

Потому что в этом случае будет создан не новый объект, а i будет присвоена ссылка на уже существующий объект из пула целых чисел. И сборщику мусора меньше работы

READ ALSO
Java Android. Запись экрана (скриншот) и ее передача

Java Android. Запись экрана (скриншот) и ее передача

Я начинающий в программировании, и мне с одноклассником (оба из 11 класса) нужно сделать проект, который будет чем-то напоминать демонстрацию...

278
Перенос на виртуальный сервер(Apache Tomcat)

Перенос на виртуальный сервер(Apache Tomcat)

Здравствуйте, недавно столкнулся с проблемой: написал сервер tomcat, но работает он только на локалкеВ этом деле я новичок и хотел спросить,...

312
Аутентификация на платных прокси в java

Аутентификация на платных прокси в java

В python есть простой рабочий код через requests:

350
Java getter для приватных объектов класса

Java getter для приватных объектов класса

Есть задача отображения объекта внешнему классу, например массиваНо без возможности редактирования во внешнем классе Пример геттера

290