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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lxww 中级黑马   /  2013-3-21 21:39  /  1441 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kingdom_202 于 2013-3-21 23:24 编辑

            class Test1 {

        public static void main(String[] args) {
                String strValue = "ABCDEFG";
                strValue.substring(3);
                strValue.concat("123");
                System.out.println(strValue);                        
                String value = new String ("ABCDEFG");
                System.out.println(strValue == value);        
        }

}
求解答。以上的输出结果为什么是ABCDEFG和false呢,而不是123DEFG和true呢?求详细描述。急急急!!!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
字符串比较不能用 ==,要用equals,因为字符串是引用,里面存的是地址。
回复 使用道具 举报
1.首先String 是final 类的,无论如何操作 都是产生新的字符串,原来的字符串的值不会变 。因此是ABCDEFG
2.再者 String 是Object 类型的。两个字符是两个对象 ,==比较的是地址,两个对象的地址不可能一样 因此是false

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
String是常量,它们的值在创建之后不能更改,StringBuffer和StringBuilder是可变的字符缓冲区。所以第一个打印出来的结果是ABCDEFG。
String value = new String ("ABCDEFG");这里是新建了一个对象,两个对象的地址值不是一样的,而==号比较的又是地址值,所以是false。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
朱盛文 发表于 2013-3-21 21:54
String是常量,它们的值在创建之后不能更改,StringBuffer和StringBuilder是可变的字符缓冲区。所以第一个 ...

受教了。讲的蛮清楚,谢谢。呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马