что происходит с объектом в Java, если вы не ссылаетесь на него, как здесь: myString.concat ("that") - PullRequest
4 голосов
/ 02 сентября 2011
String myString = "this";
//string is immutable

myString.concat(" that");
//a new object is created but not assigned to anything

System.out.println(myString); //prints out "this"

Я бы предпочел ошибку времени компиляции - почему это не так? Тот же вопрос может быть применен к любому методу с типом возвращаемого значения, когда он вызывается без указания типа возвращаемого значения.

public myObject doStuff(...whatever){
 //define my method
 return anObject;
}

можно вызвать без указания ссылки / переменной для хранения возвращаемого типа:

MyObject newObject = doStuff(); //works
doStuff(); //works too without assigning return object

Ответы [ 2 ]

6 голосов
/ 02 сентября 2011

Объект будет создан и сразу же будет доступен для сборки мусора (то есть, скорее всего, сборка мусора произойдет довольно скоро).

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

Хороший пример - Collection.add(): он возвращает объект boolean, но чаще всего вызывающий код не заинтересован в этом результате и просто игнорирует его.

Аналогичным образом StringBuilder.append() возвращает экземпляр StringBuilder, чтобы вы могли связывать вызовы. Но также вполне допустимо игнорировать это возвращаемое значение и просто использовать myStringBuilder.append("foo");.

1 голос
/ 02 сентября 2011

По сути, в Java нет встроенных механизмов в заголовках определения метода, которые сообщали бы JVM, что метод работает только с неизменяемыми данными, и единственная цель методов - вывод данных.

Я думаю, они могли бы создать такиеязыковая конструкция, но она вроде бы бесполезно загромождает язык, не предлагая много ощутимых преимуществ IMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...