これは、String
クラス内のこのコードが原因です。
public static String valueOf(char data[]) {
return new String(data);
}
コード(をスローするNullPointerException
)は上記のメソッドを呼び出すため、data
フィールドはnull
です。実際、この呼び出しはString
コンストラクターのクラスによってスローされます。
JDK 6を使用する場合、例外は次のとおりです。
java.lang.NullPointerException
at java.lang.String.<init>(String.java:177)
at java.lang.String.valueOf(String.java:2840)
at org.bfs.data.SQLTexter.main(SQLTexter.java:364)
あなたのラインに関して:
System.out.println(as+":"+as.length()); // prints: "null:4"
これは、以下のメソッドが呼び出されるときに機能します。
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
明らかに、a
はタイプでObject
あるため、String.valueOf(Object)
メソッドが呼び出されます。
特にメソッドを呼び出したい場合はString.valueOf(Object obj)
、次のようにnullを型キャストします。
System.out.println (String.valueOf((Object)null));
You're experiencing method overloading (where there are several method with the same name and method signature, but have different method parameters). In your case (where NPE occurs), the JVM determines which method to call based on the most specific static type. If the type is declared, then the most specific method is the method with the same parameter type of the declared variable, else, a most specific method rule is used by the JVM to find which method to invoke.
I hope this helps.