2016-12-27 2 views
-2
String s1=new String("Java"); /* 1st object created */ 
String s2="Tech"; /* 2nd Object */ 
s1+=s2; /* I'm confusing here whether new object created or result stored in previous object */ 

/* Общее количество объектов создано */Сколько объектов создано в нижнем коде.?

+1

Только 2. Если это происходит на компиляции. – msagala25

+0

Есть много вопросов по этому вопросу. разве вы не искали до публикации? Проверьте их: http://stackoverflow.com/questions/47605/string-concatenation-concat-vs-operator http://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal http://stackoverflow.com/questions/26083383/java-string-object-creation – Azodious

+1

Строки неизменяемы. Они не меняются. Вы всегда получаете новый. –

ответ

-1
String s1=new String("Java"); /* 2 objects created as 'new' is used - s1 (holds reference to new String) and string literal "Java" */ 
String s2="Tech"; /* 3rd Object - "Tech", s2 just holds reference to it */ 
s1+=s2; /* 4th Object created, which is concatenation of s1 and s2. s1 holds reference to it. 

Так всего 4 объектов, созданных.

+0

Я бы подумал, что 's1' содержит ссылку, поэтому это не другой экземпляр. Не могли бы вы предоставить какой-то источник того, что вы говорите? – AxelH

+0

Именно это я и упомянул - «s1 (ссылается на новую строку)». У вас может быть любое количество ссылок на один и тот же объект, но объект - это новый объект String, другой - строковый литерал «Java». Строковые литералы хранятся в пуле строк в Java, и если у вас есть другая строка: String s3 = new String («Java») // тогда будет использоваться тот же строковый литерал «Java», поэтому будет создан только один объект - новый String , –

+0

Но вы сказали, что _2 объекты, созданные как «новые», используются, но я сомневаюсь, что вы можете сказать, что Literal - это Object, поскольку мы делаем разницу между «String object» и «String literal'. Даже если бы созданные объекты были бы «Java» и «new String (« java »)», 's1' не является объектом, а переменной, содержащей ссылку на объект;) – AxelH

Смежные вопросы