第一句String s = "Welcome to Java";创建的对象在常量池中,内容是Welcome to Java
第二句String s = new String("Welcome to Java");new是在内存中开辟了一个独立的内存空间,用来存储对象,对象的内容也是Welcome to Java
equals()方法比较的是对象的内容,所以记过是true; 而==比较的是对象在内存中的地址,所以结果是false,因为他们虽然内容相同,但是在内存中的地址是不同的。
同上:
String s1= new String("Welcome to Java");
String s2 = new String("Welcome to Java");
这2个对象s1==s2也是false,因为每一次new都是开辟一个独立的空间 作者: 张文强 时间: 2012-6-4 11:07 本帖最后由 张文强 于 2012-6-4 11:10 编辑
这个经常在面试中问到
1、前者在栈内存中、后者在堆内存中,而栈的存取速度比堆要快
2、使用String s = "Welcome to Java";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
而对于String s = new String("Welcome to Java")的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。