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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

java技术栈 2017-11-22 19:29:00 浏览546
展开阅读全文

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

String str1 = "abcd";
String str2 = new String("abcd");

那么为什么会存在这两种创建方式呢,它们在内存中的表现形式各有什么区别?

下面来看下面两道经常遇到的面试题。

面试题1:
String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // true
System.out.println(a.equals(b)); // true

解析:

用""创建的a,b两个字符串,==和equals比较返回都为true,这是因为a,b都指向了方法区的同一个字符串。所以,当同样的一个字符串用""重复创建时只在方法区创建一次。

面试题2:
String c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d);  // false
System.out.println(c.equals(d)); // true

解析:

用new创建的c,d两个字符串,equals为true很简单因为equals永远比较的是值,而==为false说明两个字符串的引用不一样。用new创建的字符串每次都会在JVM堆中创建,所以c,d都对应堆中的两个不同的字符串。

关于这两道题中的""和new创建的字符串在内存中的表现形式可以看下图就明白了。

image
image

推荐阅读


去BAT面试完的Mysql面试题总结(55道,带完整答案)

阿里高级Java面试题(首发,70道,带详细答案)

2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案

Spring面试题(70道,史上最全)

通往大神之路,百度Java面试题前200页。

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。


网友评论

登录后评论
0/500
评论
java技术栈
+ 关注