На самом деле 2 объекта. str1
и str2
хранить ссылки на объекты. В то время как str3
, str4
и str5
не содержат строковые объекты, а являются строковыми литералами.
В вашем примере str1
и str2
указывают на разные объекты в Java String Pool
. Эти строки, если они будут мутированы, будут по-прежнему указывать на те же ячейки памяти, где они указывали, прежде чем их мутировать.
Хотя этот строковый объект нельзя напрямую мутировать с помощью оператора =
, поскольку строки в java: неизменяемы, но объекты stringbuffer могут быть созданы с использованием строкового объекта, а затем этот объект буфера строк может быть мутирован с помощью методов в java.lang.StringBuffer
класс.
Но если str3
, str4
и/или str5
мутированы, т.е.если вы делаете это где-то в конце кода:
str3="narendra modi";
Новая ячейка памяти будет зарезервирован в java heap
и не java string pool
, со строкой «нарендра моди», хранящейся в нем, и str3
укажут на него. Пока str4
и str5
все равно будут указывать на место, где хранится строка «nitesh».
Цитирование добавил: струнные буферы могут мутировать ...
https://icl.googleusercontent.com/?lite_url=https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html&ei=25w3utEc&lc=en-IN
Пахнет домашней работой ??? – mastazi
нет, его сложный вопрос: некоторые люди говорят, что 3 объекта и некоторые люди говорят 7 –
@NiteshBagri Читайте это: http://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal это должно помочь вы разбираетесь в том, что происходит в вашем коде. – azurefrog