ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一。你可以从这里查看全部的Java面试系列。

Q2.下面的代码片段的输出是什么?

  1. Object s1 = new String("Hello");
  2. Object s2 = new String("Hello");
  3.  
  4. if(s1 == s2) {
  5. System.out.println("s1 and s2 are ==");
  6. }
  7. else if (s1.equals(s2)) {
  8. System.out.println("s1 and s2 are equals()");
  9. }

A2.输出结果是:

s1 and s2 are equals()

可以用下面这个图来解释:

因此,上面的问题考察了面试者对”==” 和 “equals( )”在Java对象上如何应用的理解是否正确。前者比较引用,后者则比较对象中真正的值。

接着还可以有下面的问题:

Q.下面代码片段的输出是什么?

  1. Object s1 = "Hello";
  2. Object s2 = "Hello";
  3.  
  4. if (s1 == s2) {
  5. System.out.println("s1 and s2 are ==");
  6. }
  7. else if (s1.equals(s2)) {
  8. System.out.println("s1 and s2 are equals()");
  9. }

A.答案是:

s1 and s2 are ==

看上去这个答案和对前面一个问题所做的解释似乎有所违背。事实上,这个例子(或者说,规则)比较特殊,是一个典型的flyweight 模式在字符串对象创建中的应用。这个模式通过减少对象的创建来节约内存。String对象会创建一个字符串池(a pool of string),如果当前准备新创建的字符串对象的值在这个池子中已经存在,那么就不会生成新对象,而是复用池中已有的字符串对象。flyweight 模式的精髓就是对象复用。不过,只有采用Object s = “Hello”方式(而非用”new“关键字)声明String对象的时候这个规则才会被应用。

这是一个非常经常被采用的Java面试问题。

扩展阅读:

-- 扫描加关注,微信号: importnew --

英文原文: Java Success,编译:ImportNew - 郑雯

译文链接:http://www.importnew.com/2223.html

【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

【转】常见Java面试题 – 第二部分:equals与==的更多相关文章

  1. 【转】常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q.请写一段代码来计算给定文本内字符“A”的个数.分别用迭代和递归两种方 ...

  2. 【转】常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. 这篇文章介绍的常见面试题是关于重载(overloading)方法和重写( ...

  3. 【转】常见Java面试题 – 第一部分:非可变性(Immutability)和对象引用(Object reference)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.请看此系列相关面试题.你可以从这里查看全部的Java面试系列. 一些比较核心的Java问题经常会用来考验面试者的J ...

  4. 【面试必备】常见Java面试题大综合

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...

  5. 转载文章 208 个最常见 Java 面试题全解析

    最近正值春招,一直在给公司招聘 Java 程序员,我从 2015 年做 TeamLeader 开始就习惯性地收集平时遇到的 Java 技术问题或周围朋友见过的面试题,经过不断筛选,终于凝练成一套实用的 ...

  6. BATJ的常见java面试题

    JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗,为什么. 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允 ...

  7. java零基础之---常见java面试题

    看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ...

  8. 一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 11.HashMap和HashTable的区别及底层实现 12.ConcurrentHashMap原理简述,jdk7和jd ...

  9. Java面试题之“==”和“equals()”方法的区别?

    一.“== ”:运算符 1.可以使用在基本数据类型变量和引用数据类型变量中. 2.如果比较的是基本数据类型变量:比较的是两个变量保存的数据是否相等.(不一定类型要相同) 3.如果比较的是引用数据类型变 ...

随机推荐

  1. H3C PPP MP配置示例二

  2. H3C CHAP验证

  3. MySQL高级配置

    参考文章:http://www.jb51.net/article/47419.htm https://blog.csdn.net/waneto2008/article/details/52502208 ...

  4. 2019-8-2-WPF-从文件加载字体

    title author date CreateTime categories WPF 从文件加载字体 lindexi 2019-08-02 17:10:33 +0800 2018-2-13 17:2 ...

  5. 2019-10-23-WPF-使用-SharpDx-异步渲染

    title author date CreateTime categories WPF 使用 SharpDx 异步渲染 lindexi 2019-10-23 21:18:38 +0800 2018-0 ...

  6. InetAddress与Socket

    InetAddress:构造方法私有,不能直接创建对象. InetAddress getByName(String host):在给定主机名的情况下确定主机的ip地址. InetAddress get ...

  7. UVa1601 - The Morning after Halloween [单向bfs]

    解题思路: 1.注意到2*2方格中必有一个#,那么最多只有192条通道,可以将所有非‘#’的位置提取出来用邻接表的方式建图,通过bfs搜索目标位置. 2.将三个ghost的位置(a,b,c)作为状态量 ...

  8. 关于Character的digit,forDigit,getNumericValue方法的一点理解

    Character类是一个包装类. char这种数据类型是基于原始的Unicode编码的,储存一个char用16个bit,因此定义characters也是16位定长的实体集合. Unicode编码标准 ...

  9. printk函数 打印设备编号

    偶尔地, 当从一个驱动打印消息, 你会想打印与感兴趣的硬件相关联的设备号. 打印主次 编号不是特别难, 但是, 为一致性考虑, 内核提供了一些实用的宏定义( 在 <linux/kdev_t.h& ...

  10. 查看当前android设备已安装的第三方包

    查看当前android设备已安装的第三方包 adb shell pm list package -3 2        adb shell "getprop ro.build.version ...