Java面试题---String s = new String("HelloWorld")和String s2 = "HelloWorld"有区别么?

String s = new String(“HelloWorld”)和String s2 = "HelloWorld"由区别么?
答:
有。
前者在使用的时候创建了两个对象,一个在堆内存中,一个在方法区中的字符串常量池中
而后者在使用的时候创建了两个对象,对象指向的地址和前者一样

代码比较说明

public class Interview {
	public static void main(String[] args) {
		String s = new String("HelloWorld");
		String s2 = "HelloWoeld";
		System.out.println(s == s2);//false
		System.out.println(s.equals(s2));//true
	}
}

/*
	输出的结果为:
		false
		true
*/

程序分析
String s = new String(“HelloWorld”);

栈区 String s
堆区 new String()
方法区中的字符串常量池 “HelloWorld”

String s2 = “HelloWoeld”;

栈区 String s2
堆区
方法区中的字符串常量池 因为在前者已经创建了“Helloworld”,所以就不用重新开辟新的空间,这样指向的的是同一个内容

而s1和s2分别指向的是
s1:指向的是堆内存中的位置
s2:指向的是方法区中字符串常量池的位置
所以用 “==” 比较的时候就是false
用 “equals” 比较的时候,因为对应的内容一样,所以是true

在这里我们知道
“==”:比较引用类型,比较的是地址值是否相同
“equals” :比较引用类型,默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是对应内容是否相同

你可能感兴趣的:(Java问题与思考,Java面试题,String,s,=,new)