黑马程序员技术交流社区

标题: 下面的程序正确选项是哪个?求解!!!要详细的推理步骤? [打印本页]

作者: adminlxb    时间: 2015-5-17 19:52
标题: 下面的程序正确选项是哪个?求解!!!要详细的推理步骤?
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.   以上都不对
求大神指点,要详细的推理!!!

作者: wangyu    时间: 2015-5-17 20:06
==比较的是地址,所以AC都不对。String类重写了equals方法,比较的是字符串内容,所以B是对的。
作者: pvbj0314    时间: 2015-5-17 20:14
根据str1和str2的定义,它们是指向不同对象的String类型引用,对象的内容都是java。
A错误,因为==只有对于指向同一对象的引用之间比较才得到true的结果,而str1和str2是不同对象的引用。
B正确,因为String类中对equals重新定义了,所以只要str2所表示的String和str1的内容相同就会返回true。
C不正确,==两边操作数应该是同一类型,因为没有StringBuiler到String的类型转换,所以错误。
作者: 开弓没有回头箭    时间: 2015-5-17 20:29
B是对的,String a = new String("abs")这句话做的事情是:先是new语句在堆中开辟内存1,并存入字符"abc",接着赋值语句再开辟内存2,将前面内存1中的内容也就是"abc"存入该内存2,并将该内存地址给a.
所以,上面str1,str2,str3中的值是内存地址,因为每次所开辟的地址肯定是不同的,所以用==比较它们是不相等的
而equals方法是String类下定义的方法,就是用来比较地址中指向的 类容的,所以B正确
作者: zy18692243338    时间: 2015-5-17 21:30
bbbbbbbbbbbbbbbbbbbb




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