黑马程序员技术交流社区
标题:
一个小程序,关于string
[打印本页]
作者:
赵嘉男
时间:
2012-4-23 21:25
标题:
一个小程序,关于string
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
作者:
施俊
时间:
2012-4-23 21:36
sc=sb,说明他们两个指向了同一个对象,对这个对象进行了操作,当然sb也指向这个对象,所以会出现sb=2
作者:
龚正军
时间:
2012-4-23 22:06
首先你要清楚一点什么 是:StringBuffer 什么是:String !!!
StringBuffer:是一个容器,二这个容器的出现就是为了解决String类无法被改变等特性的。(String类特性你可以再去查看下,这里不多讲)
他跟String完全是2个概念!
也就是说StringBuffer既然是一个容器了,那么容器里面的东西当然可以根据需要进行改变!(这是基本你应该知道)
而从上面的代码:其中你把 sc=sb; 这句意思是你吧sb 赋值给了sc那么那么sb所指向的容器就已经被sc也指向了。
当SC被改变时,就是容器里面的东西也改变了,那么SB指向的容器改变了,当然SB最后打出来的内容是改变后的内容!!!
作者:
徐鑫
时间:
2012-4-23 22:45
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);..打印正确
}
}
作者:
韩新凯
时间:
2012-4-23 23:00
本帖最后由 韩新凯 于 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这个好理解就不解释了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2