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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵嘉男 中级黑马   /  2012-4-23 21:25  /  1795 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();
            sb.append("1111111111111111111122");
            System.out.println("sb11="+sb);
                StringBuffer sc = new StringBuffer();
                sc=sb;       
                sc = sc.delete(0,sc.length()-1);
            System.out.println("sb="+sb);
        }
}

没有对sb进行操作,为什么最后打印出来是
sb11=1111111111111111111122

sb=2

4 个回复

倒序浏览
sc=sb,说明他们两个指向了同一个对象,对这个对象进行了操作,当然sb也指向这个对象,所以会出现sb=2
回复 使用道具 举报
首先你要清楚一点什么 是:StringBuffer 什么是:String  !!!
StringBuffer:是一个容器,二这个容器的出现就是为了解决String类无法被改变等特性的。(String类特性你可以再去查看下,这里不多讲)
他跟String完全是2个概念!
也就是说StringBuffer既然是一个容器了,那么容器里面的东西当然可以根据需要进行改变!(这是基本你应该知道)
而从上面的代码:其中你把   sc=sb;   这句意思是你吧sb 赋值给了sc那么那么sb所指向的容器就已经被sc也指向了。
当SC被改变时,就是容器里面的东西也改变了,那么SB指向的容器改变了,当然SB最后打出来的内容是改变后的内容!!!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
public class Test {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();
            sb.append("1111111111111111111122");//这里sb的内容已经是1111111111111111111122
            System.out.println("sb11="+sb);//所以打印正确
                StringBuffer sc = new StringBuffer();
                sc=sb;        
                sc = sc.delete(0,sc.length()-1);//这里你把第一位到倒数第二位全部删除,所以只留了2
            System.out.println("sb="+sb);..打印正确
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 韩新凯 于 2012-4-23 23:09 编辑

把sc = sb ;这样写能明白吗?sc = sb.append("1234567890");
public StringBuffer append(String str)返回:此对象的一个引用。
这样说吧:public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
//      sb.append("1234567890");//把这行先注释掉
//        System.out.println("sb11="+sb);//这行也注释了
            StringBuffer sc = new StringBuffer();
            System.out.println("sc.equals(sb)="+sc.equals(sb));//注意这里,这里的结果返回的是false !!!
//            sc=sb;   
            sc = sb.append("1234567890");//这句话等价于sb.append("1234567890");加上   sc=sb;   
            System.out.println("sc.equals(sb)="+sc.equals(sb));//接下来注意这里,这里的结果返回的是true。这说明什么?说明到这里sc和sb指向同一个对象。接下来的代码不是重要的地方。
            System.out.println("sb11="+sb);
//            sc.append("abcdefg");
            System.out.println("sc="+sc);
            sc = sc.delete(1,sc.length()-1);//delete(1,sc.length-1);删除的是从第1位开始到sc.length-1之间的内容。不包括第1位但包括第sc.length位。
        System.out.println("sb="+sb);//按照我举例用的“1234567890”,sc.length == 10;所以删除了除了第一位和第十位外其他的内容。剩下的就是10.
        System.out.println("sc="+sc);
    }
}

你的sc.delete(0,sc.length()-1);是把第一位也给删出了,只剩下了最有一位。如果把sc.length-1换成sc.length,那你就什么也打印不出来了。
sb11=1111111111111111111122这个好理解就不解释了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马