2016-12-27 48 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

在这个问题上有很多SO问题。在发布之前没有搜索过吗?检查这些: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”对象,因此只会创建一个对象 - new String 。 –

+0

但是你说_2创建为'new'的对象被使用了_但是我怀疑你可以说Literal是一个Object,因为我们在'String object'和'String literal'之间做了区别。即使创建的对象是''Java''和'new String(“java”),'s1'不是一个对象,而是一个变量来保存对象的引用;) – AxelH

相关问题