黑马程序员技术交流社区

标题: 一个equals和==的选择题 [打印本页]

作者: -律-    时间: 2014-12-19 23:49
标题: 一个equals和==的选择题
本帖最后由 -律- 于 2014-12-22 22:45 编辑

下面哪个程序的运行结果是true(     )
a) System.out.println(“abc”.equals(“Abc”));
b) System.out.println(“”.equals(null));
c) System.out.println(“abc”==”ab”+”c”);
d) System.out.println(“”.equalsIgnoreCase(null));

能说一下A,B,C,D这4个选项为什么对,为什么错么,我感觉自己还是没有理解透


作者: 青衫禅客    时间: 2014-12-20 01:04
我只知道C选项是正确的,因为+号的优先级大于==号,所以”ab”+”c”变成了“abc”,至于其它几个选项,我还不明白字符串能直接调用方法了?!
作者: -律-    时间: 2014-12-20 01:33
我想知道b和d为什么不对
作者: as604049322    时间: 2014-12-20 09:04
a) System.out.println(“abc”.equals(“Abc”));
b) System.out.println(“”.equals(null));
c) System.out.println(“abc”==”ab”+”c”);
d) System.out.println(“”.equalsIgnoreCase(null));
只有C正确。
String类型的equals方法和equalsIgnoreCase方法都用于比较内容是否一致,前者区分大小写后者忽略大小写。
所以A错误
""在常量池中建立了一个空文本的对象,而null是栈内存中的空引用,在堆内存和常量池中都没有建立实例对象。
前者是在常量池中为空的实例对象,后者是什么都没有
所以B、D错误
而"abc"=="ab"+"c"会在常量池中建立三个对象,分别是"abc"、"ab"和"c"。
注意:常量池中的对象对于相同的内容只建立一个对象,"ab"+"c"查找到常量池已经建立"abc"对象,则将该对象的地址作为("ab"+"c")的返回值,由于他们指向了同一对象,所以相等。

作者: -律-    时间: 2014-12-22 22:04
as604049322 发表于 2014-12-20 09:04
a) System.out.println(“abc”.equals(“Abc”));
b) System.out.println(“”.equals(null));
c) System. ...

差不多,算是明白了,谢了
作者: cz萑    时间: 2014-12-22 22:17
这道题选c,    equals是判断数值上是否相等,区分大小写      ==是判断地址值是否指向同一位置,题目中的字符串都在常量池,所以是位置是一致的        
作者: 侯鹏成    时间: 2014-12-22 22:18
2楼说的不错   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2