黑马程序员技术交流社区

标题: 一个程序的运行结果,求解答 [打印本页]

作者: 我自信我很牛    时间: 2013-3-21 22:53
标题: 一个程序的运行结果,求解答
public class Demo5_StringValue {

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

        }

}
//为什么结果是这样的求解释:
//ABCDEFG
//false
作者: IT菜鸟    时间: 2013-3-21 23:07
1. String 是final 类,所以不管什么操作,都产生新的字符串,原来的字符串的值不变,所以打印ABCDEFG
2.String 是Object ,==比较的是地址,两个不同的Object对象地址 不可能一样 所以false
作者: 小路飞    时间: 2013-3-22 00:21
本帖最后由 侯国奇 于 2013-3-22 00:22 编辑

System.out.println(strValue);      
打印结果是原值,是因为字符串一旦被初始化后就不可以被改变。                  
System.out.println(strValue == value);   
打印结果是false,是因为比较的是两个内存地址值,而不是字符串本身内容。
可以用System.out.println(strValue.equals(value));得出true的结论。
作者: 丁一    时间: 2013-3-22 08:23

  1. public class Demo5_StringValue {

  2.         public static void main(String[] args) {
  3.                 String strValue = "ABCDEFG";     //定义一个字符串
  4.                 strValue.substring(3);                 //这个是返回一个子字符串,从第3个开始直到结尾, 这句没有实际意义,没输出没改变原来    strValue=strValue.substring(3)  这个是生成新的并返回
  5.                 strValue.concat("123");              //<span style="line-height: 1.5;">concat</span><span style="line-height: 1.5;">将123连接到</span>strValue<span style="line-height: 1.5;">的结尾,</span><span style="line-height: 1.5;">这句没有实际意                    义</span><span style="line-height: 1.5;">strValue=</span><span style="line-height: 1.5;">strValue.concat("123")    这样才能添加并返回</span>
复制代码

作者: 王龙涛    时间: 2013-3-22 10:15
字符串是一个特殊的对象,一旦被初始化就不可以改变。所以打印ABCDEFG
strValue是一个对象
value是2个对象
“==”比较两个变量本身的值,即两个对象在内存中的地址。
“equals()”比较字符串中所包含的内容是否相同。
LZ用==比较返回false,用equal()比较则返回true






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