面试题:String内存相关

29 阅读1分钟

如下代码,输出结果是true还是false?

public static void main(String[] args) {
    String a="abcdef";
    String b=new String("abcdef");
    System.out.println(a==b);
}

答案:false

解析:

1、引用对象==符号来判断内存地址是不是相同。注意区分Stringequals方法。
2String a="abcdef",这段代码创建了一个a引用,指向"abcdef"字符串,如果常量池中没有"abcdef"字符串,则创建。
    重点:String b=new String("abcdef"),b是通过new关键字创建的,对象一定会在堆中强制生成一个新的。
    故a和b是两个不同的对象。
    如果是代码:String b="abcdef"的话,就会在常量池中查找有没有该字符串,并且发现有,就是同一个,返回true