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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李月 中级黑马   /  2012-4-24 19:18  /  2665 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在书中看到String s1=new String(new StringBuffer("abcd"));这样一条语句。
这条语句的非简写形式是什么样子的?
StringBuffer是一个容器,它能直接传给String类型吗?

12 个回复

倒序浏览
这里用到了String类的构造方法。
String(StringBuffer buffer) ;
回复 使用道具 举报
本帖最后由 杨华威 于 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);
回复 使用道具 举报
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的
回复 使用道具 举报
String的内容不能改变,使String更近似于基本类型数据(如int,double等),在参数传递中使用传值方式,提高效率。
StringBuffer(StringBuilder)其实可以看做“基本数据类型”String的包装类(Wrapper)。
就像int与之对应的Integer等关系。(他们的关系不是完全相同,但在这点是一样的!)
回复 使用道具 举报
StringBuffer就类似是 String 的字符串缓冲区 它返回的是一个字符串呀  会自动转型  所以 是可以的
回复 使用道具 举报
学习了,只知其一,不知其二,
回复 使用道具 举报
杨红 初级黑马 2012-4-24 20:11:48
8#
new String(new StringBuffer("abcd"))就已经是把括号里的内容转换成String型的了
回复 使用道具 举报
在书中看到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。
回复 使用道具 举报
String s1=new String(new StringBuffer("abcd"));
分解代码:new StringBuffer("abcd")是创建一个StringBuffer对象
new String(new StringBuffer("abcd"));是用StringBuffer对象作为参数调用String的构造函数,创建String对象,可以查查API
回复 使用道具 举报
   String s1=new String(new StringBuffer("abcd")); String和StringBuffer都是能操作字符串的,String是长度不可改变,而StringBuffer则可以动态操作,这句话的意思就是,把StringBuffer转成String类型,你可以做下比较,StringBuffer和String的字节码是不一样的,你把StringBuffer用toString方法转成String类型后,就相等了。
回复 使用道具 举报
在语法中:String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

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


              
回复 使用道具 举报
直接贴个你源代码,让你看个清楚
  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类型了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马