Problem z porównaniem stringów

0

Mam problem z porównaniem 2 stringów ;/

Pierwszy wyciagam z bazy danych (String) wczytany jest do array liste a z niej do zmiennej.
2 gi to adres meilowy zczytany z poczty i zamieniony na String.

String mail=((InternetAddress)message.getFrom()[0]).getAddress().toString();

Porównanie nastepuje w pentli:

 for (int i=0;i<klienci.size();i++)
        {
     
          if(klienci.get(i)._meil.equals(mail))
          {
              klient=apteki.get(i)._nazwa+" "+apteki.get(i)._miasto;
          };
        }

Gdy wydrukuje sobie obie te wartosci String sa identyczne, jednak wedle equals nie ;/ Zadziałało mi to może z 2 razy nie wiem jakim sposobem ;/

Prosze po pomoc i jakiś dobre pomysły. Niby proszta rzecz a nie działa ;/

0

Nie wiem, co to _meil, ale prawdopodobnie jego klasa nie przesłania metody equals, która domyślnie działa tak, jak operator ==.

0

Klasa meil:

public class Klient
{
  String _nazwa,_miasto,_adres,_telefon,_meil,_typ_umowy,_kod,_nip,_uwagi,_apteki;
  String nazwa,miasto,adres,telefon,meil,typ_umowy,kod,nip,uwagi,apteki;

  public Apteka(String _nazwa,String _miasto,String _adres,String _telefon,String _meil,String _typ_umowy,String _kod,String _nip,String _uwagi, String _apteki)
  {this._nazwa = _nazwa; this._miasto = _miasto;this._adres=_adres;this._telefon=_telefon;this._meil=_meil; this._typ_umowy=_typ_umowy;this._kod=_kod;this._nip=_nip;this._uwagi=_uwagi;this._apteki=_apteki;}

 
  public String getName() {return this._nazwa;}
  public String getMiasto() {return this._miasto;}
  public String getAdres() {return this._adres;}
  public String getTelefon() {return this._telefon;}
  public String getMeil() {return this._meil;}**foo**
  public String getUmowa() {return this._typ_umowy;}
  public String getKod() {return this._kod;}
  public String getNip() {return this._nip;}
  public String getUwagi() {return this._uwagi;}
  public String getApteki() {return this._apteki;}

  public void setName(String _nazwa) {this._nazwa = _nazwa;}
  public void setMiasto(String _miasto) {this._miasto = _miasto;}
  public void setAdres(String _adres) {this._adres = _adres;}
  public void setTelefon(String _telefon) {this._telefon = _telefon;}
  public void setMeil(String _meil) {this._meil = _meil;}**foo**
  public void setUmowa(String _typ_umowy) {this._typ_umowy = _typ_umowy;}
  public void setKod(String _kod) {this._kod = _kod;}
  public void setNip(String _nip) {this._nip = _nip;}
  public void setUwagi(String _uwagi) {this._uwagi = _uwagi;}
  public void setApteki(String _apteki) {this._apteki = _apteki;}

  public String toString()  {return this._nazwa;}
  public String toString2() {return this._miasto;}
  public String toString3() {return this._adres;}
  public String toString4() {return this._telefon;}
  public String toString5() {return this._meil;}**foo**
  public String toString6() {return this._typ_umowy;}
  public String toString7() {return this._kod;}
  public String toString8() {return this._nip;}
  public String toString9() {return this._uwagi;}
  public String toString10() {return this._apteki;}

Dobra rada moze wymysle cos innego ;)

for (int i=0;i<apteki.size();i++)
        {
          klient=mail;
          String pomoc=apteki.get(i)._meil;
          System.out.println(pomoc);
          if(pomoc.equals(mail)) klient=(apteki.get(i)._nazwa+" "+apteki.get(i)._miasto);
          if(pomoc==mail)klient=(apteki.get(i)._nazwa+" "+apteki.get(i)._miasto);
          
        }

Nic to nie daje nawet jak przypisze sobie do zmiennej strine A zmienna string equals juz obsługuje ;/ w desperacji testowałem nawet == ;/

0

Bo porównujesz referencje, a nie zawartość obiektów. Musisz przesłonić metodę equals sprawdzając, czy wszystkie pola danych obiektów są równowartościowe (twoje IDE pewnie potrafi to wygenerować).
Swoją drogą - dlaczego pola klasy masz pakietowe i z nich korzystasz, skoro do każdego masz gettera i settera?

0

Nie wiem o co chodzi z tym przeciazaniem equals ale dzieki za podpowiedz. Poczytam cos ... moze mnie oświeci ;)

0

Przykład z książki Core JAVA, powinien ci pomóc:

class Employee
{
. . .
   public boolean equals(Object otherObject)
   {
      // a quick test to see if the objects are identical
      if (this == otherObject) return true;
      // must return false if the explicit parameter is null
      if (otherObject == null) return false;
      // if the classes don't match, they can't be equal
      if (getClass() != otherObject.getClass())  return false;
      // now we know otherObject is a non-null Employee
      Employee other = (Employee) otherObject;
      // test whether the fields have identical values
      return name.equals(other.name)
            && salary == other.salary
            && hireDay.equals(other.hireDay);
    }
}
0

Przykład pomógł.

Porównuje 2 obiekty, oba nie są równe null, ich klasy są identyczne, nie są sobie równe ;/ Nie wiem dlaczego Myślałem ze może gdy String zaczytuje się z meila dodawana jest do niego jakaś spacja dlatego nie można ich porównać ale niestety ;/ W obu przypadkach użyłem .trim(); do odcinania spacji, porównywałem tez stringi na zawartość w różne strony . Użyłem startsWith, endsWith, equalsIgnoreCase. Nie chcą być równe i nie wiem dlaczego. Gdy wydrukuje są identyczne, klasy identyczne ;/

0

Pokaż tą metodę.

0

Dzięki za pomoc ale juz sobie poradziłem.

Napisałem wszystko na nowo nic nie zmieniajac, kropka w kropke i zaczeło działać jakaś dziwna rzecz. Nie wiem co było źle ale juz działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1