Prüfen auf Gleichheit(Intferace)

Spaceman85

Mitglied
Ich leite mehrere Klassen von verschiedenen übergeordneten Interfaces ab und möchte dann später die Objekte, welche ich von einen anderen Package aus über dias Interface anspreche vergleichen (via ==) also auf Objektgleichheit und nicht auf den selben inhalt, geht das nicht?

Ich habe in den Klassen welche von diesen Interfaces ableiten z.B Strings deklariert und bei einigen Instanzen sind die Strings genau gleich deswegen kann ich nicht via equals vergleichen weil ich dann falsche Werte erhalte, ich hoffe man versteht mein Problem!
 

zerix

Hausmeister
Moderator
Hallo,

also da du ein Problem zu haben scheinst, hab ich dein Problem wahrscheinlich doch nicht verstanden. Wenn du machst
Code:
obj1 == obj2

Dann wird geprüft ob es sich um das gleiche Object handelt, also ob beide Referenzen auf das gleiche Object zeigen.

Vielleicht solltest du nochmal genau erklären was du möchtest, vielleicht mit einem kleinen Beispiel. Du solltest auch sagen, was denn nicht funktioniert.

MFG

Sascha
 

Spaceman85

Mitglied
PHP:
public interface Tutorial{
  /* Code */
        }

PHP:
public class TutorialClass implements tutorial{

        String string;
         public tutorialClass(String string){
               this.string =string;
             }
     }


PHP:
public class Package1{
      
         Tutoriall[] tut1 = new Tutorial[10];
           
          public Tutorial getTutorial(param){
               i= berechne;
               return tut[i];
                }
                
            public void Tutorial[] getTutorials(){
                  return this.tut1;
            }
     }

PHP:
public class Package2{
         Tutorial[] tut2 = new Tutorial[10];
          tut1= package2.getTutorials();
          Tutoial test   = Package1.getTutorial(param);

          for(int i=0; i<tut2.length;i++){
              if(test == tut2){
                   /* Code */   
                   }
}

Und die If-Abfrage gibt nie true aus!
 

Matze

Weltenwanderer
Warscheinlich weil sie niemals true ist!
Wenn du mal deine Beiden Objekte per System.out.println() mal ausgeben lassen würdest, würdest du sehe, dass sie nicht gleich sind, auch wenn es ihr Inhalt ist.
Versuchs doch mal mit .equals(Object) anstat mit ==.

Kleinen Tipp noch: Für Java Code die Java-Tags [*JAVA] benutzen, macht es einfacher zu lesen ;)
 

Matze

Weltenwanderer
Was willst du eigentlich vergleichen, die Beiden Objekte oder jeweils die Inhalte EINZELN ?
 

zerix

Hausmeister
Moderator
Hallo,

nach deinem Beispiel, welches auch ein paar Unstimmigkeiten hat, kann es niemals gleich sein.
In diesem Fall würde true rauskommen.
Code:
Tutorial tut1 = new TutorialClass
Tutorial tut2 = tut1;


  System.out.println(tut1 == tut2);

In deinem Beispiel kann das auch nie true sein, weil du ein Array mit einem einzelnen Tutorial vergleichst.

MFG

Sascha
 

Matze

Weltenwanderer
Wieso steckst du sie dann in eine Vorschleife?

Ok, damit du mich richtig verstehst:
Objekte vergleichen:
Java:
if(tutequals(tut2)){

Inhalte der Arrays:
Java:
for(int iCounter = 0; iCounter < tut.lenght; iCounter++){
  if(tut[iCounter].equals(tut2.[iCounter])){
  ...
  }
...
}

Edit: Oh, stimmt Sascha, hab ich ganz übersehen...