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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

:handshake/**
* 需求:6、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)

        public class Test {
                public static void main(String[] args) {
                        String s = "abc";
                        s.substring(1);
                        s.replace("bc", "xyz");
                       System.out.println(s);
                       String value = new String ("abc");
                       System.out.println(s == value);
                }
       }
       分析:1,String s= "abc";定义了一个字符串常量,abc,一但被初始化就不可改变值。
*·        2.调用String类的substring构造方法,从1角标位索引,返回该字符串的子串"bc".
*3.调用String类的replace构造方法,替换原字符串的字符“bc”为新字符“xyz”.
*4在控制台打印输出字符串s。结果应该为字符串“xyz”.
*5.String value = new String("abc");这是重新定义了字符常量value,并且地址值指向原有字符串"abc"的内存空间。
*6.在控制台打印输出s==value,返回结果是boolean型值。因为常量一但定义无法改变值,所以结果为ture.
*7.借组MyEclipse高级编辑器验证结果。
*/
public class Test6 {
                   //6、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
            public static void main(String[] args) {
                    String s = "abc";
                    s.substring(1);
                    s.replace("bc", "xyz");
                   System.out.println(s);
                   String value = new String ("abc");
                   System.out.println(s == value);
            }
   }结果是:abc,false.和我的结果刚好相反!求分析哪里错了?

评分

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

查看全部评分

5 个回复

倒序浏览
因为字符串一旦创建就不能修改,你的S一直都没变,s.substring(1);    s.replace("bc", "xyz");都是重新创建了一个新的字符串,不过你返回的值都没用String类引用接收,这两句代码执行完等于什么都没做,所以s还是"abc"。
String value = new String ("abc");虽然值一样,但它是重新创建了一个String对象,所以是false

点评

"=="运算符不就是比较值的吗?和equles有区别的。还是我理解反了?  发表于 2014-3-4 17:22

评分

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

查看全部评分

回复 使用道具 举报
一年_Hei 发表于 2014-3-4 15:50
因为字符串一旦创建就不能修改,你的S一直都没变,s.substring(1);    s.replace("bc", "xyz");都是重新创 ...

==是比较二个对象的哈希码是否相等。equals方法是Object类中的方法。在默认情况下比和==是一样的。都是比较哈希码。
但这个方法在不同的类中。可能被不同的所重写,一般重写后都是比较二个对象的值是否相等。拿String类做个比喻:== 比较的是二个对象的的引用是不是同一个字符串,而equals比较的是二个对象中的字符串的值是不是相等
回复 使用道具 举报
帮你添加了点语句
看看结果 再理解一下
  1. public class IntegerDemo {
  2.         public static void main(String[] args) {
  3.                 String s = "abc";
  4.                 System.out.println(s.substring(1));
  5.                 String s1 =s.replace("bc", "xyz");
  6.                 System.out.println(s);
  7.                 System.out.println(s1);
  8.                 String value = new String("abc");
  9.                 System.out.println(s == value);
  10.         }
  11. }
复制代码

评分

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

查看全部评分

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