String在java中的null以及+的作⽤
此处省略⼀万⾏⾃⽩......................................
1.直接输出打印是String对象的null
String str = null;
System.out.print(str);
输出结果是:null
源码是:
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
2.直接输出打印不是String对象的null
Integer a = null;
System.out.print(a);
输出结果是:null
源码是:
public void print(Object obj) {
write(String.valueOf(obj));
}
再看valueOf:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : String();
}
也就是说print⽅法对 String 对象和⾮ String 对象分开进⾏处理。
3.那么怎么保证可以保证打印 null 对象不会出错?
(1)String 对象:直接判断是否为 null,如果为 null 给 null 对象赋值为”null”。
(2)⾮ String 对象:通过调⽤String.valueOf⽅法,如果是 null 对象,就返回”null”,否则调⽤对象的toString⽅法。
4.null 对象与字符串拼接
String str = null;
str = str + "!";
System.out.print(str);
结果是:null!
看源码:
//针对 String 对象
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
count += len;
return this;
}
//针对⾮ String 对象
public AbstractStringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
private AbstractStringBuilder appendNull() {
java valueofint c = count;
ensureCapacityInternal(c + 4);
final char[] value = this.value;
value[c++] = 'n';
value[c++] = 'u';
value[c++] = 'l';
value[c++] = 'l';
count = c;
return this;
}
也就是说:append函数如果判断对象为 null,就会调⽤appendNull,填充”null”。
5.就像强转⼀样
+=有⾃动强转的功能
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论