概念
String.valueOf()メソッドは、引数としてnullが参照されている場合には文字列”null”を返します。
そのため、StringUtils.isBlank()などのメソッドを使用して判断する場合、この場合はtrueが返されます。
これは、valueOf(Object obj)メソッドが呼び出されるためです。
( jdk1.8.0_131の一部のソースコード)
/**
* Returns the string representation of the {@code Object} argument.
*
* @param obj an {@code Object}.
* @return if the argument is {@code null}, then a string equal to
* {@code "null"}; otherwise, the value of
* {@code obj.toString()} is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
String.valueOf()メソッドをnullで呼び出した場合、NullPointerExceptionが発生します。
IDEを使用すると、valueOf(null)が呼び出すStringクラスのメソッドは次のようになります(jdk1.8.0_131の一部のソースコード):
/**
* Returns the string representation of the {@code char} array
* argument. The contents of the character array are copied; subsequent
* modification of the character array does not affect the returned
* string.
*
* @param data the character array.
* @return a {@code String} that contains the characters of the
* character array.
*/
public static String valueOf(char data[]) {
return new String(data);
}
そして、上記のソースコードの中のnew String(data)は以下のメソッドを呼び出します(jdk1.8.0_131でのStringの一部のソースコード)。
/**
* Allocates a new {@code String} so that it represents the sequence of
* characters currently contained in the character array argument. The
* contents of the character array are copied; subsequent modification of
* the character array does not affect the newly created string.
*
* @param value
* The initial value of the string
*/
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length); //value[]为null时,报NPE
}
valueOf()が“null”文字列を返す可能性があるため、使用する際には特に注意する必要があります。
単純にStringUtils.isEmpty()やisBlank()を使用して、valueOf()の返り値が空かどうかを判断することはできません。
コメント