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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 火之意志 中级黑马   /  2013-5-22 23:16  /  1075 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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.

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

3 个回复

倒序浏览
前一个比较的是他俩的值,因为是默认的值都是null所有会相等,
回复 使用道具 举报
你好 我查看了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) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
两者构造出来之后一个初始化过 一个没有初始化过 所以不一样。。。

大概是这样。。不肯定。。。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
楼上的解释应该是不正确的
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方法比较的是内存地址。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马