请问stringBuffer的问题?stringBuffer.append(null)???

卡纳瓦咯 2006-07-19 05:37:17
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());
}

}
请问这是为什么?
...全文
644 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
卡纳瓦咯 2006-07-19
  • 打赏
  • 举报
回复
可以肯定的是null不是Object,因为jdk有这个方法public StringBuffer append(Object obj) 而str.append("aa").append(null);是错误的。to qin_607() :这样说还讲的通。有没有官方的解释?
heniry_he 2006-07-19
  • 打赏
  • 举报
回复
第一程序中的null是一个字符串,而第二个是空对象,在追加的时候,jvm 找不到这个对象,所以报错,不知道这样说是否合理。
ihateit2005 2006-07-19
  • 打赏
  • 举报
回复
append()方法里可以带Object ,String,StringBuffer...
放个null让append()去选哪个方法执行呢?所以就罢工了
jlusdy 2006-07-19
  • 打赏
  • 举报
回复
可以这么理解

第一段程序
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进行考虑
卡纳瓦咯 2006-07-19
  • 打赏
  • 举报
回复
噢!第二个我写错了

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());
}

}
rw99yy 2006-07-19
  • 打赏
  • 举报
回复
这个地方的null是表示为空 并不是 “null”.
infowain 2006-07-19
  • 打赏
  • 举报
回复
第一个问题,java就是这样处理的。
jokerjava 2006-07-19
  • 打赏
  • 举报
回复
可以这么解释
null其实是特殊的对象 null.toString() = "null";
jlusdy 2006-07-19
  • 打赏
  • 举报
回复
第二个程序
str1 没有定义类型啊

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧