1、直接赋值法
class StringDemo
{
public static void main(String[] args)
{
String str="hello";
}
}
方法简单,字符串hello本身就是String类的一个匿名对象(没有栈内存指向的堆内存空间),在堆内存开辟了一个内存空间,在栈内存中直接存储的就是该字符串hello的地址,当再次有对象调用字符串hello的时候,栈内存中存储的是相同的地址。即,栈内存的两块内存空间(类的两个对象)可以共同指向同一个堆内存空间。
2、构造方法法
class StringDemo
{
public static void main(String[] args)
{
String str=new String("hello");
}
}
该方法会浪费内存空间,不建议使用。
因为字符串hello本身就是一个匿名对象,在堆内存中已经占用了一个堆内存空间。而该方法中的关键字new 又开辟了一个堆内存空间,并在该堆内存中存放hello,使得之前的堆内存成为垃圾,等待被回收。