String类在JAVA开发中是必不可少的
但是 String对象在实例化时内存问题却很严重
String类以下有两种实例化方式
⑴用 new String ( )
如 String str = new String("Hello World!")
系统会先为括号里的“Hello World!”开辟出一个堆内存的空间 然后再开辟一个新空间(内容也是 "Hello World!" )给String对象的属性
这样 就开辟出了两个空间
一个栈内存地址只能匹配给一个堆内存 所以 String对象就只会后面开辟的空间而已
而之前开辟的那个存放“Hello World!”的空间就成了垃圾 白白浪费了内存空间
⑵用 “=”
如
String str = "Hello World!";
String str1 = "Hello World";
实际上 "Hello World!" 在堆内存中只有一个 str 和 str1 都是指向于存放 "Hello World!" 的空间
这样就避免了浪费内存空间
另外:
例如:String str = "Hello";
str = str + " World!";
这样其实也很浪费空间 因为存放于栈内存中的字符串的内容是不会改变的
等于说这段代码只是再次开辟了一块新的空间存放相加后的 “Hello World!” 只是str的指向变成了“Hello World!”
而之前 str 所指向的"Hello" 与 新开辟的“ World!” 的空间就白白浪费掉了
所以在循环中 尽量不要使用关于String类的对象 否则将造成大量的空间被浪费