5个。
直接量"hello"存在池中。由这个串创建一个新对象(存在堆中),赋给str。这已经两个了。直接量"java"存在池中。三个。
从池中取出"java",再从堆中取出原来的str,即"hello",追加起来成为一个新串"hellojava"(存在池中),然后把这个新串赋值给变量str(存在堆中)。共5个。
freish太有才了。这个算他的。
需要说明的是:第一次出现字符串直接量时会在池中创建一个新的,之后出现就不会创建了,而是直接把引用指向第一次创建的对象。 但对于new出来的对象,无论怎样赋值,new一次创建一次(在堆中),不会考虑之前是否已经已存在相同的。而且,字符串是不可追加的,所以每次使用连接符号其实相当于先产生一个常量,然后再赋给引用,原来指向的串就成垃圾被回收了。