Java中创建String的两道面试题及详解

我们知道创建一个String类型的变量一般有以下两种方法:

  1. String str1 ="abcd";
  2. String str2 =newString("abcd");
那么为什么会存在这两种创建方式呢,它们在内存中的表现形式各有什么区别?
下面来看下面两道经常遇到的面试题。
面试题1:
  1. String a ="abcd";
  2. String b ="abcd";
  3. System.out.println(a == b);  // true
  4. System.out.println(a.equals(b));// true
解析:
用””创建的a,b两个字符串,==和equals比较返回都为true,这是因为a,b都指向了方法区的同一个字符串。所以,当同样的一个字符串用””重复创建时只在方法区创建一次。
面试题2:
  1. String c =newString("abcd");
  2. String d =newString("abcd");
  3. System.out.println(c == d);  // false
  4. System.out.println(c.equals(d));// true
解析:
用new创建的c,d两个字符串,equals为true很简单因为equals永远比较的是值,而==为false说明两个字符串的引用不一样。用new创建的字符串每次都会在JVM堆中创建,所以c,d都对应堆中的两个不同的字符串。
关于这两道题中的””和new创建的字符串在内存中的表现形式可以看下图就明白了。

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » Java中创建String的两道面试题及详解

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多