黑马程序员技术交流社区

标题: String对象比较问题 [打印本页]

作者: 火之意志    时间: 2013-5-22 23:16
标题: String对象比较问题
String s1=new String();
        String s2=new String("");
        System.out.println(s1.equals(s2));

        StringBuffer buffer=new StringBuffer();
        StringBuffer buffer1=new StringBuffer("");
        System.out.println(buffer1.equals(buffer));
        前一个的结果是true为什么后一个结果是false.
作者: 刘治广    时间: 2013-5-22 23:20
前一个比较的是他俩的值,因为是默认的值都是null所有会相等,
作者: 陈潜    时间: 2013-5-22 23:40
你好 我查看了jdk文档,大胆猜测下~~·

String s1=new String();
String s2=new String("");
这两个都是new了一个空字符串,详见JDK中String构造方法:
构造方法:String()   初始化一个新创建的 String 对象,它表示一个空字符序列。
构造方法:String(String original) , 初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列
就是说他们两个都是空字符串,equals是相同的

再看StringBuffer
StringBuffer buffer=new StringBuffer();
StringBuffer buffer1=new StringBuffer("");
构造方法:StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
构造方法:StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
两者构造出来之后一个初始化过 一个没有初始化过 所以不一样。。。

大概是这样。。不肯定。。。
作者: 刘学明       时间: 2013-5-23 00:14
楼上的解释应该是不正确的
String s1=new String();
        String s2=new String("");
        System.out.println(s1.equals(s2));//这里的true  是因为String中的equals比较的是两个字符串对象中的内容,因为String类把Object类中的equals方法覆盖了。

        StringBuffer buffer=new StringBuffer();
        StringBuffer buffer1=new StringBuffer("");
        System.out.println(buffer1.equals(buffer));
//这里的false是因为equals在StringBuffer类中没有覆盖equals方法,也就是使用了Object中的equals方法,
Object中的equals方法比较的是内存地址。




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