一般情况下,创建对象时通过new关键字创建出来的,但是有的时候会通过一个方法返回类的实例对象,比如单例模式就是通过public static Object getInstance()方法得到的对象,但是这个方法内部也是new出来对象的。所以综上一般情况下都是通过new出来对象的。但是String类确实属于比较另类的一个,因为当你String str = “hello”;的时候就也会创建对象,但这个字符串对象会放在常量池中,供以后访问同样的字符串时调用。
所以,String str = new String("hello")这句代码,首先是在常量池中创建了“hello”对象,在在堆内存中创建String对象(引用str存在栈内存中),并把常量池中对象“hello”的引用传递给String,所以如此下来是创建了两个对象。 |