Java throws an impossible NullPointerException

Shortening to necessary, I have the following code:

public class C_Test extends A_Test {
    C_Test() {
        super( null );
    }
}

public abstract class A_Test {
    private final String m_test;

    public A_Test( String test ) {
        m_test = C_ObjectUtil.defaultIfNull( test, "" );

        if( m_test == null ) {
            throw new RuntimeException( "it happened again!" );
        }
    }
}

public class C_ObjectUtil {
    public static <T> T defaultIfNull( T object, T defaultObject ) {
        return ( object == null ) ? defaultObject : object;
    }
}

After reading about 70 MB of data from the DB2 database using JDBC, the call new C_Test()throws an impossible exception. Until this time, the constructor was called more than 100,000 times.

After embedding the method defaultIfNullin the constructor A_Test(this removes generics) everything works without errors!

Environment: Sun JDK 1.7.0_25 64Bit, Linux

Any idea what is going on here?


This is where stacktrace goes. This does not match the version above. An exception is thrown here when called m_test.equals( "null" )in the constructor A_Test.

java.lang.NullPointerException
        at com.src.db.attribvisitors.A_AttribVisitorAssignFromResultSet.<init>(A_AttribVisitorAssignFromResultSet.java:54)
        at com.src.db.attribvisitors.C_AttribVisitorAssignFromSelectStatement.<init>(C_AttribVisitorAssignFromSelectStatement.java:37)
        at com.src.db.attribvisitors.C_AttribVisitorAssignFromSelectStatement.<init>(C_AttribVisitorAssignFromSelectStatement.java:43)
        at com.src.framework.db.migration.A_DbTableRow.initFromResultset(A_DbTableRow.java:96)
        at com.src.framework.db.migration.helper.C_DbTableProcessor$1.process(C_DbTableProcessor.java:66)
        at com.src.db.C_TxSql.query(C_TxSql.java:144)
        at com.src.db.C_SqlExecuter$3.execute(C_SqlExecuter.java:142)
        at com.src.db.C_SqlExecuter.execute(C_SqlExecuter.java:80)
        at com.src.db.C_SqlExecuter.query(C_SqlExecuter.java:138)
        at com.src.framework.db.migration.helper.C_DbTableProcessor.processTable(C_DbTableProcessor.java:58)
        at com.src.framework.db.migration.helper.C_DbTableProcessor.processTable(C_DbTableProcessor.java:39)
        at com.src.tools.C_DbExporter.exportTable(C_DbExporter.java:93)
        at com.src.tools.C_DbExporter.exportTables(C_DbExporter.java:77)
        at com.src.tools.C_DbExporter.exportTables(C_DbExporter.java:61)
        at com.src.tools.C_DbExporterAndImporter.exportTables(C_DbExporterAndImporter.java:95)
        at com.src.tools.C_DbExporterAndImporter.doMain(C_DbExporterAndImporter.java:83)
        at com.src.common.C_MainUtil.runMain(C_MainUtil.java:150)
        at com.src.tools.C_DbExporterAndImporter.main(C_DbExporterAndImporter.java:57)
+4
source share
3

Sun JDK 1.7.0_25 64Bit Sun JDK 1.7.0_55 64Bit, NPE !

0

- , , .

m_test = C_ObjectUtil.defaultIfNull( test, "" );

test String "" . , .

public static <T> T defaultIfNull( T object, T defaultObject ) {
    return ( object == null ) ? defaultObject : object;
}

test, .. null, object, String defaultObject. defaultObject, .. non-null String. m_test . . , - ( static, ), .

.

( , , .)

+3

, , . , . , , .

Kayaman , JIT. , .

, .

  • () - JIT.
  • JIT (, ). (2) .
  • JIT , () . , (2) .

, - Cruncher - . , - . , .

.:)

+2

Source: https://habr.com/ru/post/1538116/


All Articles