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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 沙漠里的小鱼 于 2012-2-23 06:52 编辑

String s = new String(new StringBuffer("a"))和String s = new String("a")区别 我们创建一个实例对象 一般都是String s = new String("a")     为什么在讲反射举例创建对象是时候是String s = new String(new StringBuffer("a"))    里面多了个new StringBuffer   
通过反射创建一个实例对象 Constructor constructor1=String.class.getConstructor(StingBuffer.class)
String str2 = (String)constructor1.newInstance(new StringBuffer(“a”));
我不明白的是String s = new String(new StringBuffer("a"))   里面多了个new StringBuffer    不可以直接  String s = new String("a")   

16 个回复

正序浏览
沙漠里的小鱼 发表于 2012-2-23 12:11
能说的在详细点吗  我不是很明白啊

这要从String类构造方法说起,我们知道String有很多构造方法,public String(String original) 这个构造方法我们最常用  即String s = new String("a");但产生一个String实例对象还可以调用其他的构造方法,其中一个就是
public String(StringBuffer buffer),该构造方法需要传递一个StringBuffer类的对象作为参数,来产生一个String.
产生一个StringBuffer实例对象可以调用它的这个public StringBuffer(String str)构造方法,即StringBuffer stb=new StringBuffer("a");
String s = new String(new StringBuffer("a"))和String s = new String("a")所产生的对象是不同的,虽然都是"a",还不明白可以查API文档说明,看看这两个构造函数的区别
回复 使用道具 举报
黄秋 黑马帝 2012-2-23 21:16:46
16#
你的疑惑与彭坤的类似,详见:
http://bbs.itheima.com/forum.php ... =7346&pid=40729
回复 使用道具 举报
String(new StringBuffer("a")) 等同String("a")  只是StringBuffer效率高些 如果String比较大就体现出来吧
回复 使用道具 举报
首先你想用反射的方法获得一个类的构造方法,String类的构造方法有很多,String s = new String(new StringBuffer("a"));是用String类中的接收参数类型为StringBuffer类型的一个参数。
Constructor constructor1=String.class.getConstructor(StingBuffer.class)这个获得的就是String中参数类型为StringBuffer类型的那个构造方法,所以你自然要传入一个StringBuffer类型的参数了。
回复 使用道具 举报
本帖最后由 周峰 于 2012-2-23 19:22 编辑
  1. package com.zhoufeng.test;

  2. import org.w3c.dom.Element;

  3. public class Test {
  4.         public static void main(String[] args) {
  5.                 StringBuffer sb = new StringBuffer();//现在我实例了一个StringBuffer对象
  6.                 sb = sb.append("123");  //给着个对象追加了一个abc的值,现在sb对象的值为abc
  7.                
  8.                 // append() 这个方法类似于System.out.println("你好" + "我叫小峰");中的 "+" 号 ;
  9.                
  10.                 //好了 现在帮你换个思路  我现在要把着个 sb 对象里面的值给一个String类型的文本里面
  11.                 Element element = null;//这个是个元素 至于是什么 你要是不懂就不要去理解
  12.                
  13.                 element.setTextContent(sb);//setTextContent();这个方法里面是个String类型接收  
  14.                
  15.                 //现在上面一句报错 因为类型不一样  需要转成String才能放  我们在后面点toString()方法就OK了
  16.                
  17.                 element.setTextContent(sb.toString());
  18.                
  19.                
  20.                 //---------------------------现在换一个写法
  21.                 element.setTextContent(new StringBuffer("123456").toString());
  22.                
  23.                 //到了着我们不需要去声明sb对象了。  一句就OK   
  24.         }
  25. }
复制代码
System.out.println(new StringBuffer("123456"));  这里为什么不需要转toString 呢?其实是需要的 因为  println的重载方法  帮你自动转换成String类型了!~
回复 使用道具 举报
djx900 黑马帝 2012-2-23 15:09:21
12#
传入了一个函数对象
回复 使用道具 举报
石德志 发表于 2012-2-23 08:59
String s = new String(new StringBuffer("a"));相当于StringBuffer stb=new StringBuffer("a");
String s ...

能说的在详细点吗  我不是很明白啊
回复 使用道具 举报
String s = new String(new StringBuffer("a"));相当于StringBuffer stb=new StringBuffer("a");
String s = new String(stb);总的意思是通过一个需要参数为StringBuffer 实例的一个String类的构造方法来产生一个String实例  
回复 使用道具 举报
周峰 发表于 2012-2-22 20:39
new StringBuff 是StringBuff 类型 而不是String类型 你上面那句是直接把一个 StringBuff 类型 new在了 Str ...

能不能讲的详细点 举个例子啊 谢谢了
回复 使用道具 举报
周峰 发表于 2012-2-22 20:39
new StringBuff 是StringBuff 类型 而不是String类型 你上面那句是直接把一个 StringBuff 类型 new在了 Str ...

我就是没想明白啊  为什么么要加StringBuffer
回复 使用道具 举报
foxpeter 发表于 2012-2-22 21:33
Constructor constructor1=String.class.getConstructor(StingBuffer.class)
这句右边括号里的StringBuffe ...

谢谢你的回答 可是你没明白我的意思啊

评分

参与人数 1技术分 +1 收起 理由
admin + 1 不懂就问!

查看全部评分

回复 使用道具 举报
Constructor constructor1=String.class.getConstructor(StingBuffer.class)
这句右边括号里的StringBuffer.class就代表了这个构造函数是有一个StringBuffer.class类型参数的构造函数
如果你实在不想用这个 就想用String的  可以换成 String.class
回复 使用道具 举报
new StringBuff 是StringBuff 类型 而不是String类型 你上面那句是直接把一个 StringBuff 类型 new在了 String 方法里面! 你需要分清楚的是   StringBuff  和String 是不同的类型  !String s = new String(new StringBuffer("abc")) 自动把StringBuffer类型转换成了 String类型~
回复 使用道具 举报
【专】【属】 发表于 2012-2-22 13:09
这是两个不同的构造方法而矣,因为在String的有很多的构造函数,同学可以看一下API中关开String的构造函数 ...

哎  你没明白啊 我想知道为什么里面多了个new StringBuff
回复 使用道具 举报
【专】【属】 发表于 2012-2-22 13:09
这是两个不同的构造方法而矣,因为在String的有很多的构造函数,同学可以看一下API中关开String的构造函数 ...

那为什么讲反射举例创建对象是时候是String s = new String(new StringBuffer("abc"))    里面多了个new StringBuff
回复 使用道具 举报
这是两个不同的构造方法而矣,因为在String的有很多的构造函数,同学可以看一下API中关开String的构造函数就可以明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马