黑马程序员技术交流社区

标题: 谁能帮我把这条语句解释一下? [打印本页]

作者: 李月    时间: 2012-4-24 19:18
标题: 谁能帮我把这条语句解释一下?
在书中看到String s1=new String(new StringBuffer("abcd"));这样一条语句。
这条语句的非简写形式是什么样子的?
StringBuffer是一个容器,它能直接传给String类型吗?

作者: 岳伟伟    时间: 2012-4-24 19:23
这里用到了String类的构造方法。
String(StringBuffer buffer) ;
作者: 杨华威    时间: 2012-4-24 19:24
本帖最后由 杨华威 于 2012-4-24 19:26 编辑

String s1=new String(new StringBuffer("abcd"));
分解如下:
String s tr1= "abcd";
StringBuffer sb = new Stringbuffer(str1);
String str2 = sb.toString();
String s1 =new String(str2);
作者: 褚代江    时间: 2012-4-24 19:32
StringBuffer sb=new StringBuffer("abcd");
String s1=new String(sb);

z这个样子相当于是将StringBuffer转型成为String

不能懂得话,给你举个例子
public class a
{
        public static void main(String args[])
        {
String s="abc";
s+="def";//String操作字符串实际上是让程序创建了四个对象:
//两个待拼接的String,一个临时StringBuffer,和最后
//将StringBuffer转型成为的String.
System.out.println(s);
        }
}
这个里面就是先拼接成StringBuffer,拼接好后再转型成为String的

作者: 周海诚    时间: 2012-4-24 19:34
String的内容不能改变,使String更近似于基本类型数据(如int,double等),在参数传递中使用传值方式,提高效率。
StringBuffer(StringBuilder)其实可以看做“基本数据类型”String的包装类(Wrapper)。
就像int与之对应的Integer等关系。(他们的关系不是完全相同,但在这点是一样的!)
作者: 应佳锋    时间: 2012-4-24 19:35
StringBuffer就类似是 String 的字符串缓冲区 它返回的是一个字符串呀  会自动转型  所以 是可以的
作者: xiwangliujiao    时间: 2012-4-24 19:46
学习了,只知其一,不知其二,
作者: 杨红    时间: 2012-4-24 20:11
new String(new StringBuffer("abcd"))就已经是把括号里的内容转换成String型的了
作者: 林德燚    时间: 2012-4-24 20:26
在书中看到String s1=new String(new StringBuffer("abcd"));这样一条语句。
这条语句的非简写形式是什么样子的?
StringBuffer是一个容器,它能直接传给String类型吗?

这个String s1=new String(new StringBuffer("abcd"));与String s1=new String("abcd")和String s1="abcd";都一样的,
String是常量不能被修改的,StringBuffer缓冲数组可以修改,比如字符串串联是通过StringBuffer实现的,
StringBuffer调用toString方法返回的结果类型就是String。
作者: 徐鑫    时间: 2012-4-24 20:35
String s1=new String(new StringBuffer("abcd"));
分解代码:new StringBuffer("abcd")是创建一个StringBuffer对象
new String(new StringBuffer("abcd"));是用StringBuffer对象作为参数调用String的构造函数,创建String对象,可以查查API
作者: 李震 李震 李震    时间: 2012-4-24 20:46
   String s1=new String(new StringBuffer("abcd")); String和StringBuffer都是能操作字符串的,String是长度不可改变,而StringBuffer则可以动态操作,这句话的意思就是,把StringBuffer转成String类型,你可以做下比较,StringBuffer和String的字节码是不一样的,你把StringBuffer用toString方法转成String类型后,就相等了。
作者: 真真姐    时间: 2012-4-24 20:54
在语法中:String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

看分析:
StringBuffer str  = new StringBuffer("abcd");    // 构建一个字符串缓冲区,里面存放的是有特定字符序列的字符串,通过某些方法调用可以改变该序列的长度和内容。
String s1=new String(str);                             // 产生一个新字符串,里面是缓冲区中的字符序列


              
作者: 高彰谦    时间: 2012-4-25 08:57
直接贴个你源代码,让你看个清楚
  1. public String(StringBuffer buffer) {
  2.         String result = buffer.toString();
  3.         this.value = result.value;
  4.         this.count = result.count;
  5.         this.offset = result.offset;
  6.     }
复制代码
虽然接收的是StringBuffer但是已经通过toString转换成String类型了




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