2013-06-18 42 views
0

我有这样的方法,字符串方法Append():StringBuilder的VS StringBuffer的

public static void main(String[] args) { 

    String s = "Java"; 
    StringBuilder buffer = new StringBuilder(s); 
    change(buffer); 

     System.out.println("What's strBuf.charAt(5)? " + strBuf.charAt(3)); 
     System.out.println(buffer); 
    } 

    private static void change(StringBuilder buffer) { 

      buffer.append(" and HTML"); 
    } 

当我运行使用StringBuilder的,我得到错误信息的代码, “构造的StringBuilder(字符串)是不确定 方法的charAt (int)对于StringBuilder类型是未定义的“

在调试的过程中,我尝试了StringBuffer,它的工作完美。 StringBuffer对象的内容编译为“Java和Eclipse的。”

public static void main(String[] args) { 

    String s = "Java"; 
    StringBuffer strbuf = new StringBuffer(s); 
    change(strbuf); 

       System.out.println("The Stringbuffer.charAt(5) is ? " + strbuf.charAt(3)); 
      System.out.println(strbuf); 
} 

     private static void change(StringBuffer strbuf) { 

         strbuf.append(" and Eclipse"); 
} 
} 

有人可以告诉我为什么后者“StringBuffer的”工作和StringBuilder的didnt。 以及是否合法将字符串传递到StringBuilder构造函数中。 “StringBuilder的(一个或多个);”

+0

@fge你是对的,我检查Java文档,它表明传递字符串的StringBuilder的构造函数是合法的,但它仍然在我使用的eclipse版本中不起作用。任何建议。 – zee

回答

4

StringBuilder确实constructor accepting a String as an argument确实a .charAt() method(它必须实现,因为它实现CharSequence)。

结论:这是IDE的一部分,它没有导入正确的StringBuilder。你使用另一个库,它有不幸的“财产”,已经实现了一个类相同的名称 - 但不是在同一个包。

去看看你的文件的顶部,如果导入行是:

import java.lang.StringBuilder; 
+0

它的工作原理,我导入了错误的StringBuilder类而不是java.lang.Class。谢谢@fge – zee

+1

“你”导入或你的IDE做了什么? ;) – fge

+1

我的IDE建议它,然后我继续提出建议。 @fge – zee

2

你可能已经进口了错误的StringBuilder类,而不是java.lang.StringBuilder中的里面确实有一个StringBuilder(String)构造和charAt(int)方法。

您可以检查您的导入。你应该有这样一个

import java.lang.StringBuilder; 
+0

谢谢@Amin,是的,这是问题。 – zee

0

确保你定义你的类名作为StringBuilder

例如: ,即使正确导入

import java.lang.StringBuilder; 

但是,如果你把你的课写成

public class StringBuilder { //If class name matches below Object Creation 
public static void main(String[] args) { 

String s = "Java"; 
StringBuilder buffer = new StringBuilder(s); //Object creation 
change(buffer); 

    System.out.println("What's strBuf.charAt(5)? " + strBuf.charAt(3)); 
    System.out.println(buffer); 
} 

private static void change(StringBuilder buffer) { 

     buffer.append(" and HTML"); //you will get this error at append 
    //The method append(String) is undefined for the type StringBuilder 
} 
} 

建议

重命名你的类名到别的但不StringBuilder

相关问题