黑马程序员技术交流社区

标题: 关于String的问题 [打印本页]

作者: lxww    时间: 2013-3-21 21:39
标题: 关于String的问题
本帖最后由 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呢?求详细描述。急急急!!!
作者: 张文星    时间: 2013-3-21 21:42
字符串比较不能用 ==,要用equals,因为字符串是引用,里面存的是地址。
作者: IT菜鸟    时间: 2013-3-21 21:46
1.首先String 是final 类的,无论如何操作 都是产生新的字符串,原来的字符串的值不会变 。因此是ABCDEFG
2.再者 String 是Object 类型的。两个字符是两个对象 ,==比较的是地址,两个对象的地址不可能一样 因此是false
作者: 朱盛文    时间: 2013-3-21 21:54
String是常量,它们的值在创建之后不能更改,StringBuffer和StringBuilder是可变的字符缓冲区。所以第一个打印出来的结果是ABCDEFG。
String value = new String ("ABCDEFG");这里是新建了一个对象,两个对象的地址值不是一样的,而==号比较的又是地址值,所以是false。

作者: lxww    时间: 2013-3-21 23:23
朱盛文 发表于 2013-3-21 21:54
String是常量,它们的值在创建之后不能更改,StringBuffer和StringBuilder是可变的字符缓冲区。所以第一个 ...

受教了。讲的蛮清楚,谢谢。呵呵




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