黑马程序员技术交流社区

标题: StringBuffer代码、疑问 [打印本页]

作者: Emperors    时间: 2014-4-18 11:28
标题: StringBuffer代码、疑问
package cn.itcom;

public class Test02 {

        public static void main(String[] args) {
                    //创建对象
                StringBuffer sd = new StringBuffer();
               
                sd.append("hello");   //添加元素
                sd.append("zuguo");
                sd.append(12345);
       //      sd.append(true);

        System.out.println("sd:"+sd);
    }
}
     我想问一下,为什么12345不加 "",也能打印出来呢?而上面的hello如果不加"",会报错,这是怎么回事呢?这跟返回值有关吗???
而又如果在添加      //      sd.append(true);,也会打印出来,而这又是怎么回事呢?这个也没带 "" 这号啊,难道这又和关键字有关呀??????

  请大神指教   谢谢


作者: ノtrack    时间: 2014-4-18 11:49
StringBuffer append(boolean b)
          将 boolean 参数的字符串表示形式追加到序列。
StringBuffer append(char c)
          将 char 参数的字符串表示形式追加到此序列。
StringBuffer append(char[] str)
          将 char 数组参数的字符串表示形式追加到此序列。
StringBuffer append(char[] str, int offset, int len)
          将 char 数组参数的子数组的字符串表示形式追加到此序列。
StringBuffer append(CharSequence s)
          将指定的 CharSequence 追加到该序列。
StringBuffer append(CharSequence s, int start, int end)
          将指定 CharSequence 的子序列追加到此序列。
StringBuffer append(double d)
          将 double 参数的字符串表示形式追加到此序列。
StringBuffer append(float f)
          将 float 参数的字符串表示形式追加到此序列。
StringBuffer append(int i)
          将 int 参数的字符串表示形式追加到此序列。
StringBuffer append(long lng)
          将 long 参数的字符串表示形式追加到此序列。
StringBuffer append(Object obj)
          追加 Object 参数的字符串表示形式。
StringBuffer append(String str)
          将指定的字符串追加到此字符序列。
StringBuffer append(StringBuffer sb)
          将指定的 StringBuffer 追加到此序列中。
StringBuffer appendCodePoint(int codePoint)
          将 codePoint 参数的字符串表示形式追加到此序列。


重载 亲  
作者: sanguodouble1    时间: 2014-4-18 12:19
本帖最后由 sanguodouble1 于 2014-4-18 12:22 编辑

亲,请仔细看下API文档,
StringBuffer的append方法重载了N个
append(12345); 就自动调用append(int i)
同理,append(true);就自动调用append(boolean b)

而如果你写成append(hello),就调用append(Object obj),
但这时编译器会发现,Y的,没有hello这个对象啊,所以就报错


补充一下,append(Object obj),就是把对象obj的toString()返回值放进去

作者: 呆呆沙师妹    时间: 2014-4-18 12:34
因为它们都是字面量。
sd.append("hello");   //字符串字面量,必须添加“”;若没有添加,会被视为标识符,也就是变量
sd.append(12345);    //十进制字面量
sd.append(true);       //布尔型字面量
另外还有,字符字面量'c',十六进制字面量0x123A等等。
这些字面量都可以赋值给变量,添加进StringBuffer中不会有问题。


作者: 左拉    时间: 2014-4-18 14:29
StringBuffer中的append()和System.out.print()很类似,都重载了很多次,所以在括号里面的东西如果是基本数据类型(数字,字符,布尔值等)就按照基本数据类型读取,如果是合法的标识符变量就按照对象处理,print()打印对象时会默认调用Object对象的toString()方法用于对象信息的输出,append()处理对象时,追加的是Object 参数的字符串表示形式,也是调用toString()方法
作者: 孙旌棋    时间: 2014-4-20 10:05
亲, 我表示最开始也很纠结这个问题. 举个简单的例子就很能说明问题, StringBuffer就相当于一口可以炒菜的锅, 它里面可以放进去肉, 蔬菜, 调料, 这里就是boolean char char[] int  String等数据类型,只要符合数据类型规范, 就是可以存进去的哦, 12345很明显是属于int类型的数据,当然不需要加 "" 的啊,但是 hello 属于字符串的, 那自然是需要加 "" 的.
作者: Emperors    时间: 2014-4-20 11:25
孙旌棋 发表于 2014-4-20 10:05
亲, 我表示最开始也很纠结这个问题. 举个简单的例子就很能说明问题, StringBuffer就相当于一口可以炒菜的锅 ...

哦了  谢谢


作者: demown    时间: 2014-4-20 12:09
自动装箱啊 1.5新特性老师不是讲了吗
作者: 。烊了    时间: 2014-4-20 15:35
StringBuffer类的append()方法具有很多重载形式,
StringBuffer append(boolean b)
          将 boolean 参数的字符串表示形式追加到序列。
StringBuffer append(char c)
          将 char 参数的字符串表示形式追加到此序列。
StringBuffer append(char[] str)
          将 char 数组参数的字符串表示形式追加到此序列。
StringBuffer append(char[] str, int offset, int len)
          将 char 数组参数的子数组的字符串表示形式追加到此序列。
StringBuffer append(CharSequence s)
          将指定的 CharSequence 追加到该序列。
StringBuffer append(CharSequence s, int start, int end)
          将指定 CharSequence 的子序列追加到此序列。
StringBuffer append(double d)
          将 double 参数的字符串表示形式追加到此序列。
StringBuffer append(float f)
          将 float 参数的字符串表示形式追加到此序列。
StringBuffer append(int i)
          将 int 参数的字符串表示形式追加到此序列。
StringBuffer append(long lng)
          将 long 参数的字符串表示形式追加到此序列。
StringBuffer append(Object obj)
          追加 Object 参数的字符串表示形式。
StringBuffer append(String str)
          将指定的字符串追加到此字符序列。
StringBuffer append(StringBuffer sb)
          将指定的 StringBuffer 追加到此序列中。
此时,你只要添加上述的类型,那么apend()即会搜索到对应的重载方法,进而使其中的数据以字符串的形式尾加到你当前的序列中。
作者: idream    时间: 2014-4-20 20:51
append(int i) ; 在StringBuffer中是可以添加int数的
作者: 四川男人    时间: 2014-4-20 22:57

StringBuffer的使用,你要多看看api





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