A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© -律- 中级黑马   /  2014-12-19 23:49  /  880 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 -律- 于 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个选项为什么对,为什么错么,我感觉自己还是没有理解透

6 个回复

倒序浏览
我只知道C选项是正确的,因为+号的优先级大于==号,所以”ab”+”c”变成了“abc”,至于其它几个选项,我还不明白字符串能直接调用方法了?!
回复 使用道具 举报
我想知道b和d为什么不对
回复 使用道具 举报
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")的返回值,由于他们指向了同一对象,所以相等。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报 1 0
as604049322 发表于 2014-12-20 09:04
a) System.out.println(“abc”.equals(“Abc”));
b) System.out.println(“”.equals(null));
c) System. ...

差不多,算是明白了,谢了
回复 使用道具 举报
这道题选c,    equals是判断数值上是否相等,区分大小写      ==是判断地址值是否指向同一位置,题目中的字符串都在常量池,所以是位置是一致的        
回复 使用道具 举报
2楼说的不错   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马