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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

eg:
String str1= new String("java");
String str2= new String("java");
StringBuffer str3= new StringBuffer("java");

对于以上定义的变量,以下表达式的值为true的是哪个?()
A.  str1 == str2;          B.   str1.equals(str2);
C.  str2 == str3;          D.   以上都不对
求大神指点,要详细的推理!!!

4 个回复

倒序浏览
==比较的是地址,所以AC都不对。String类重写了equals方法,比较的是字符串内容,所以B是对的。
回复 使用道具 举报
根据str1和str2的定义,它们是指向不同对象的String类型引用,对象的内容都是java。
A错误,因为==只有对于指向同一对象的引用之间比较才得到true的结果,而str1和str2是不同对象的引用。
B正确,因为String类中对equals重新定义了,所以只要str2所表示的String和str1的内容相同就会返回true。
C不正确,==两边操作数应该是同一类型,因为没有StringBuiler到String的类型转换,所以错误。
回复 使用道具 举报
B是对的,String a = new String("abs")这句话做的事情是:先是new语句在堆中开辟内存1,并存入字符"abc",接着赋值语句再开辟内存2,将前面内存1中的内容也就是"abc"存入该内存2,并将该内存地址给a.
所以,上面str1,str2,str3中的值是内存地址,因为每次所开辟的地址肯定是不同的,所以用==比较它们是不相等的
而equals方法是String类下定义的方法,就是用来比较地址中指向的 类容的,所以B正确
回复 使用道具 举报
bbbbbbbbbbbbbbbbbbbb
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马