成员变量是放在栈内存中,String s = "abc" 这里的abc因当在堆内存的字符串池中,注意,abc一旦new出,那么就不会再改变,java对String做了相应的优化,比如:String s1= "abc" -->String s2 = "abc" 那么这时,堆内存中只会存在一个abc对象,因为s2和s1指向的是同一个对象...java会尽量的对字符串的优化.(因为字符串是不可以变的对象,重有不会带来任何问题 )比如你再s = "abc"+"def"那么这时虚拟机会再给你创建一个abcdef对象出来,这时s所以指向的就是"abcdef"这个对象的引用了,
String内部用到的"+"号,他重载了系统的"+" 他之所以会把字符串相加,是因为String里的"+"内部,用到的是StringBuilder的append方法做的相加.如果在做大量的字符串相加时最好用StringBuilder他的速度更快.特别是在for循环下禁用String对字符串相加,这样会产生好多垃圾出来.
|