【转】常见Java面试题 – 第二部分:equals与==
ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一。你可以从这里查看全部的Java面试系列。
Q2.下面的代码片段的输出是什么?
 Object s1 = new String("Hello");
 Object s2 = new String("Hello"); 
 if(s1 == s2) {
     System.out.println("s1 and s2 are ==");
 }
 else if (s1.equals(s2)) {
     System.out.println("s1 and s2 are equals()");
 }
A2.输出结果是:
s1 and s2 are equals()
可以用下面这个图来解释:

因此,上面的问题考察了面试者对”==” 和 “equals( )”在Java对象上如何应用的理解是否正确。前者比较引用,后者则比较对象中真正的值。
接着还可以有下面的问题:
Q.下面代码片段的输出是什么?
Object s1 = "Hello";
Object s2 = "Hello"; if (s1 == s2) {
System.out.println("s1 and s2 are ==");
}
else if (s1.equals(s2)) {
System.out.println("s1 and s2 are equals()");
}
A.答案是:
s1 and s2 are ==
看上去这个答案和对前面一个问题所做的解释似乎有所违背。事实上,这个例子(或者说,规则)比较特殊,是一个典型的flyweight 模式在字符串对象创建中的应用。这个模式通过减少对象的创建来节约内存。String对象会创建一个字符串池(a pool of string),如果当前准备新创建的字符串对象的值在这个池子中已经存在,那么就不会生成新对象,而是复用池中已有的字符串对象。flyweight 模式的精髓就是对象复用。不过,只有采用Object s = “Hello”方式(而非用”new“关键字)声明String对象的时候这个规则才会被应用。

这是一个非常经常被采用的Java面试问题。
扩展阅读:
- 常见Java面试题 – 第一部分:非可变性(Immutability)和对象引用(Object reference)
- 常见Java面试题 – 第三部分:重载(overloading)与覆盖(overriding)
- 常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)
-- 扫描加关注,微信号: importnew --

英文原文: Java Success,编译:ImportNew - 郑雯
译文链接:http://www.importnew.com/2223.html
【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】
【转】常见Java面试题 – 第二部分:equals与==的更多相关文章
- 【转】常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)
		ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q.请写一段代码来计算给定文本内字符“A”的个数.分别用迭代和递归两种方 ... 
- 【转】常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)
		ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. 这篇文章介绍的常见面试题是关于重载(overloading)方法和重写( ... 
- 【转】常见Java面试题 – 第一部分:非可变性(Immutability)和对象引用(Object reference)
		ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.请看此系列相关面试题.你可以从这里查看全部的Java面试系列. 一些比较核心的Java问题经常会用来考验面试者的J ... 
- 【面试必备】常见Java面试题大综合
		一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ... 
- 转载文章  208 个最常见 Java 面试题全解析
		最近正值春招,一直在给公司招聘 Java 程序员,我从 2015 年做 TeamLeader 开始就习惯性地收集平时遇到的 Java 技术问题或周围朋友见过的面试题,经过不断筛选,终于凝练成一套实用的 ... 
- BATJ的常见java面试题
		JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗,为什么. 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允 ... 
- java零基础之---常见java面试题
		看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ... 
- 一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
		这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 11.HashMap和HashTable的区别及底层实现 12.ConcurrentHashMap原理简述,jdk7和jd ... 
- Java面试题之“==”和“equals()”方法的区别?
		一.“== ”:运算符 1.可以使用在基本数据类型变量和引用数据类型变量中. 2.如果比较的是基本数据类型变量:比较的是两个变量保存的数据是否相等.(不一定类型要相同) 3.如果比较的是引用数据类型变 ... 
随机推荐
- 如何查看linux中的ssh端口开启状态
			netstat -anp |grep 22 netstat -anp |grep sshlsof -i :22 
- jQuery中的siblings()的用法
			siblings 英文翻译 兄; 弟; 姐; 妹; 的意思 siblings()用于查找当前元素的同胞元素,就是拿到当前元素的兄弟节点(不包括自己). 给当前元素设置新的样式,并删除当前元 ... 
- Python--day63--单表的增删改查/GET和POST/request相关知识点回顾
- Python--day43--连表查询(重要)
- Gyn 100989 "1D Cafeteria (B)"(set+lower_bound)
			传送门 •题意 某自助餐厅有 n 张桌子,桌子编号为 1~n,其中第 i 张桌子可容纳 ai 个人: 有两种操作: (1)in x : 有 x 个人来这家餐厅吃饭,需要找一个可容纳 x 人的桌子,并满 ... 
- java多异常处理
			声明异常时尽可能声明具体异常类型,方便更好的处理; 方法声明几个异常就对应有几个catch块; 若多个catch块中的异常出现继承关系,父类异常catch块放在最后; 在catch语句块使用Excep ... 
- 【51.64%】【POJ 1330】Nearest Common Ancestors
			Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26416 Accepted: 13641 Description A roote ... 
- HDU6581 Vacation (HDU2019多校第一场1004)
			HDU6581 Vacation (HDU2019多校第一场1004) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6581 题意: 给你n+1辆汽车, ... 
- C# 实现多线程
			1.System.Threading命名空间 System.Threading命名空间提供了使得可以多线程编程的类和接口 其中 (1)Thread类构成了C#多线程编程的支柱,他用于创建并控制线程 ... 
- 【Ubuntu】查看端口占用及关闭
			1.查看已连接的服务端口 (ESTABLISHED) netstat有一个快捷键[ss] netstat -a ss -a 2.查看所有的服务端口(LISTEN,ESTABLISHED) netsta ... 
