Wenn Object mit null verglichen wird, wird es zu Integer gecasted #312

Closed
opened 2024-04-02 15:34:44 +00:00 by i21023 · 0 comments
Collaborator

Aktuell kann man Objekte aufgrund von fehlerhaftem Bytecode nicht mit null vergleichen.

Beispiel

Sourcecode

class Foo{
    Bar i = new Bar();
    foo(){
        if(i == null){}
    }
}

class Bar {}

Dekompilierter Bytecode

// Source code is decompiled from a .class file using FernFlower decompiler.
class Foo {
   Bar i = new Bar();

   public Foo() {
   }

   void foo() {
      if ((Integer)this.i == (Integer)null) {
      }

   }
}

Wie man sieht, wird versucht das Objekt Bar in java.lang.Integer zu casten, um es mit null zu vergleichen. Das schlägt zur Laufzeit fehl.

Exception in thread "main" java.lang.ClassCastException: class Bar cannot be cast to class java.lang.Integer (Bar is in unnamed module of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap')`
Aktuell kann man Objekte aufgrund von fehlerhaftem Bytecode nicht mit null vergleichen. ### Beispiel **Sourcecode** ```java class Foo{ Bar i = new Bar(); foo(){ if(i == null){} } } class Bar {} ``` **Dekompilierter Bytecode** ```java // Source code is decompiled from a .class file using FernFlower decompiler. class Foo { Bar i = new Bar(); public Foo() { } void foo() { if ((Integer)this.i == (Integer)null) { } } } ``` Wie man sieht, wird versucht das Objekt `Bar` in `java.lang.Integer` zu casten, um es mit `null` zu vergleichen. Das schlägt zur Laufzeit fehl. ``` Exception in thread "main" java.lang.ClassCastException: class Bar cannot be cast to class java.lang.Integer (Bar is in unnamed module of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap')` ```
dholle referenced this issue from a commit 2024-04-08 11:18:38 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#312
No description provided.