在java中,new是用来开辟堆内存(又叫做初始化)
例如:
1.String str = new String("Test");
2.String str = "Test";
上述(1)代码开辟堆内存放入了对象,并把他的引用赋给了str。
即:str是一个地址,它指向new String("Test")所开辟的内存空间,该空间中有一个值‘Test’。当使用new时,JVM会先使用常量池来管理“Test”直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。
当java程序直接使用“Test”的字符串直接量时,JVM将会使用常量池来管理这个字符串;在执行这句话时,JVM会先检查常量池中是否已经存在Test,若没有则存入常量池,否则就复用常量池中已有的Test,将其引用赋值给常量str。
显然,采用new的方式会多创建一个对象出来,会占用更多的内存,所以一般建议使用直接量的方式创建字符串。