package other;public class A { public static void main(String[] args) {
String str1 = "aa";
if(str1.equalsIgnoreCase("aa")) {
str1 = null;
}
StringBuffer str = new StringBuffer();
str.append("aa").append(str1);//这里str1=null,好用
System.out.println(str.toString());
}}
输出结果是aanull
为什么str在调用append的时候参数是null,他却当成字符串处理了?
但是,
package other;public class A { public static void main(String[] args) {
str1 = null;
StringBuffer str = new StringBuffer();
str.append("aa").append(str1);//null,编译出错
System.out.println(str.toString());
}}
请问这是为什么?

解决方案 »

  1.   

    第二个程序
    str1 没有定义类型啊
      

  2.   

    可以这么解释
    null其实是特殊的对象  null.toString() = "null";
      

  3.   

    第一个问题,java就是这样处理的。
      

  4.   

    这个地方的null是表示为空 并不是 “null”.
      

  5.   

    噢!第二个我写错了package other;public class A {public static void main(String[] args) {StringBuffer str = new StringBuffer();
    str.append("aa").append(null);//null,编译出错
    System.out.println(str.toString());
    }}
      

  6.   

    可以这么理解第一段程序
        public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
        }
    第二段程序
        public synchronized StringBuffer append(Object obj) {
    return append(String.valueOf(obj));
        }
    append没有对null进行考虑
      

  7.   

    append()方法里可以带Object ,String,StringBuffer...
    放个null让append()去选哪个方法执行呢?所以就罢工了
      

  8.   

    第一程序中的null是一个字符串,而第二个是空对象,在追加的时候,jvm 找不到这个对象,所以报错,不知道这样说是否合理。
      

  9.   

    可以肯定的是null不是Object,因为jdk有这个方法public StringBuffer append(Object obj) 而str.append("aa").append(null);是错误的。to qin_607() :这样说还讲的通。有没有官方的解释?