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());
}}
请问这是为什么?
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());
}}
请问这是为什么?
str1 没有定义类型啊
null其实是特殊的对象 null.toString() = "null";
str.append("aa").append(null);//null,编译出错
System.out.println(str.toString());
}}
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进行考虑
放个null让append()去选哪个方法执行呢?所以就罢工了