String s = "java基础",这种形式的赋值在java中被称之为直接量,它是存在于常量池中。
当我们程序启动后,程序会自动在JVM中开辟内存空间。当我们声明了这样一个字符串之后,JVM会首先常量池中查找这个值为“java基础”的对象。如果有,就把它赋给当前引用。
如果没有则在常量池中新建一个“java基础”对象。
而当我们用new String()时,就是在堆里面建立一个String类型的对象。无论他的值是否和其他对象的值相同。然后在栈里面引用这个对象。
如:
String s = "java"; // 生成一个对象。并且该对象在常量池中。
String s = new String("java"); //生成两个对象。一个是“java",一个是new String("java"); "java"本身来讲就是一个字符串对象。而new String("java")又返回一个字符串对象。
【java基础】之String和new String()的区别
原文:http://blog.csdn.net/u013412066/article/details/44628045