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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴华二 中级黑马   /  2012-3-22 00:21  /  3133 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class TestLowerCase
{
        public static void main(String[] args)
        {
                String a = "ABCD";
                String b = a.toLowerCase();
                System.out.println(b);
                b.replace('a','d');

                b.replace('b','c');
                System.out.println(b);
        }
}
麻烦哪位大哥帮忙看下这个程序怎么还是只输出abcd,一直找不出问题,知道的麻烦给点建议也...

评分

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

查看全部评分

6 个回复

倒序浏览
String a = "ABCD";
String b = a.toLowerCase();
               
String c = b.replace('a','d');  // 会产生一个新的字符串
String d = b.replace('b','c');// 会产生一个新的字符串
System.out.println(b);   //被String修饰的值不能被改变,所以为abcd

回复 使用道具 举报
哥们!字符串是一个常量,你不能对其本身进行什么改变操作,只能在操作后返回一个新的对象!
也就是说   b.replace('a','d');
                b.replace('b','c');
这两条语句对b是不会产生什么影响的!你可以像前面定义b一样载定义一个String c = b.replace('a','d');
j接受一些替换后的结果,在输出c就行了!
回复 使用道具 举报
本帖最后由 OMG 于 2012-3-22 00:45 编辑

1,字符串是对象:一旦初始化就无法改变,因为对象是无法赋值的;
2,replace方法的返回类型:是String,不是void;你需要声明一个新的变量来指向新的字符串对象:
String string = b.replace('a','d');
System.out.println(string);//结果一定有变化
回复 使用道具 举报
String是不可变字符序列,每次进行修改删除一些操作,都会复制出去一份修改,而至于原本的则还是保持原状。如果想修改本身,并且地址不变,那你还是使用可变的字符序列吧,如StringBuffer
回复 使用道具 举报
被String 修饰的 值是不可以被修改的。
可以再修饰一个值来返回b.
String c = b.replace('a','d');  来返回将a替换了!
回复 使用道具 举报
我改好了,需要对b重新赋值,
class TestLowerCase
{
         public static void main(String[] args)
        {
                 String a = "ABCD";
                 String b = a.toLowerCase();
                 System.out.println("修改前b:"+b);
                 b = b.replace('a','d');//将替换后的值在赋给b

                 b = b.replace('b','c');//将替换后的值在赋给b
                 System.out.println("修改后b:"+b);
         }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马