常见Java面试题:equals与==
2014-02-22 00:00
549 查看
摘要: equals与==,初学者很容易将它搞错,现在来详细分析下它们!
Q1.下面的代码片段的输出是什么?
A1.输出结果是:
s1 and s2 are equals()
可以用下面这个图来解释:
因此,上面的问题考察了面试者对”==” 和 “equals( )”在Java对象上如何应用的理解是否正确。前者比较引用,后者则比较对象中真正的值。
Q2.下面代码片段的输出是什么?
A2.答案是:
s1 and s2 are ==
看上去这个答案和对前面一个问题所做的解释似乎有所违背。事实上,这个例子(或者说,规则)比较特殊,是一个典型的flyweight 模式在字符串对象创建中的应用。这个模式通过减少对象的创建来节约内存。String对象会创建一个字符串池(a pool of string),如果当前准备新创建的字符串对象的值在这个池子中已经存在,那么就不会生成新对象,而是复用池中已有的字符串对象。flyweight 模式的精髓就是对象复用。不过,只有采用Object s = “Hello”方式(而非用”new“关键字)声明String对象的时候这个规则才会被应用。
Q1.下面的代码片段的输出是什么?
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()"); }
A1.输出结果是:
s1 and s2 are equals()
可以用下面这个图来解释:
因此,上面的问题考察了面试者对”==” 和 “equals( )”在Java对象上如何应用的理解是否正确。前者比较引用,后者则比较对象中真正的值。
Q2.下面代码片段的输出是什么?
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()"); }
A2.答案是:
s1 and s2 are ==
看上去这个答案和对前面一个问题所做的解释似乎有所违背。事实上,这个例子(或者说,规则)比较特殊,是一个典型的flyweight 模式在字符串对象创建中的应用。这个模式通过减少对象的创建来节约内存。String对象会创建一个字符串池(a pool of string),如果当前准备新创建的字符串对象的值在这个池子中已经存在,那么就不会生成新对象,而是复用池中已有的字符串对象。flyweight 模式的精髓就是对象复用。不过,只有采用Object s = “Hello”方式(而非用”new“关键字)声明String对象的时候这个规则才会被应用。
相关文章推荐
- 常见Java面试题 – 第二部分:equals与==
- 常见Java面试题 – 第二部分:equals与==
- 常见Java面试题:equals与==
- 【转】常见Java面试题 – 第二部分:equals与==
- Java面试题之精选最常见的面试真题 上
- Java常见面试题集--面试题全面综合(一)
- Java常见面试题(二)JAVA集合类
- java常见面试题之Integer,String比较相等及equal案例
- [Java面试]七:常见面试题之线程
- java最常见面试题
- java常见面试题
- JAVA常见面试题
- 【Java面试题】3 Java的"=="和equals方法究竟有什么区别?简单解释,很清楚
- JAVA线程操作常见面试题 包括不使用内部类对多个线程加减1
- Java常见面试题—JVM运行时数据区域
- Java常见面试题_2016
- java常见面试题
- 【Java面试题】41 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
- Java中的常见面试题
- java基础常见面试题