校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 字符串匹配
题目

假设有以下代码String s = "hello";String t = "hello";char c [ ] = {'h','e','l','l','o'};下列选项中返回false的语句是?

A. s.equals(t);

B. t.equals(c);

C. s == t;

D. t.equals(new String("Hello"));

解答

正确答案:B

本题考查的是java里面略有特殊的String类的比较。对于String的“==”和“equals”,比较好理解,“==”是地址的相等,“equals”是值的相等。

A是很直白的值比较,没有问题

B是String类型和char类型的值比较,不是把String和Char看成一种类型,char[]数组最后会加结束符“\n”。

那有同学问,如果是地址比较是不是相等。这是个傻问题,String是对象,char是基本类型,地址不一样。

C是很多同学出问题的地方,两个String地址比较,应该是不相等的吧?但是写程序运行一下,返回的是true,

原因就是String自带特殊属性,连equals方法的实现都单独为它写了逻辑。如果两个String的值一样都是“hello”,第二个String在创建的时候,指向堆的时候,先检查String pool常量池中是否有对象"hello",如果没有也产生一个对象"hello",如果有则不产生。

D是值比较,没有问题

C 0条回复 评论

帖子还没人回复快来抢沙发