使用以下行,您不是在堆中创建新的String对象,而是重用字符串文字(如果已经可用):
String message = "Hai";
“Hai”是字符串文字池中的字符串文字。因为,字符串是不可变的,它们是可重用的,所以它们被JVM集中在字符串文字池中。这是推荐的方式,因为你是重用它。
但是,使用下面你实际上是创建一个新对象(在堆):
String message = new String("Hai");
new String(“Hai”)是一个新的String对象。在这种情况下,即使字面值“Hai”已经在字符串文字池中,也会创建一个新对象。不建议这样做,因为可能会导致多个具有相同值的String对象结束。
Are there other classes which do not require new to create object ??
实际上,不能使用关键字new来创建Java中的任何对象。
例如
Integer i = 1;
这并不意味着Integer对象是在不使用new的情况下创建的。我们不需要明确使用新的关键字。但是,在引擎盖下,如果值为1的Integer对象不存在于缓存中(整数对象由JVM缓存),将使用new关键字创建它。