题目
假设有以下代码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是值比较,没有问题
帖子还没人回复快来抢沙发