Input == String => false

Dieses Thema im Forum "Java/Mono/dotGNU" wurde erstellt von Penta, 18.03.2011.

  1. Penta

    Penta Boardmaler

    Dabei seit:
    14.05.2007
    Beiträge:
    176
    Zustimmungen:
    0
    Ort:
    Berlin
    Hallo Leute,
    ich habe mir eine eigene Klasse zum einlesen der Tastatur gebaut und habe dort nun follgendes Problem:
    Wenn ich ein String einlese und diese mit einem initialisierten String vergleiche, der den gleichen Inhalt hat, gibt er mit ein false.
    Ich liste hier mal die Codes auf:
    Input:
    Code:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    
    public class Input {
    
        public static String readString(){
            String line = "";
            String val = "";
            try {
              BufferedReader is = new BufferedReader(
                new InputStreamReader(System.in));
              line = is.readLine();
              val = line.intern();
            } catch (IOException e) {
              System.err.println("Unexpected IO ERROR: " + e);
            }
            return val;
        }
    
    }
    Und hier mal meine Testing.java:
    Code:
    public class Testing {
    
        public static void main(String[] args) {
    
            String str1 = "test";
            String str2 = Input.readString();
            System.out.println("Step 0:");
            String str3 = str2+"test2\n";
            System.out.print(str3);
            System.out.println("Step 1:");
            if(str1 == str2){
                System.out.println("gleich");
            }else{
                System.out.println("ungleich");
            }
            
            str2 = str2.replaceAll("\n", "");
            System.out.println("Step 2:");
            if(str1 == str2){
                System.out.println("gleich");
            }else{
                System.out.println("ungleich");
            }  
        }
    }
    
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Penta

    Penta Boardmaler

    Dabei seit:
    14.05.2007
    Beiträge:
    176
    Zustimmungen:
    0
    Ort:
    Berlin
    Kann geclosed werden, hab nach lange Suche, den dummen Fehler gefunden. -.-
     
  4. #3 T-Virus, 19.03.2011
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Hatte beim einstieg in Java das gleiche Problem :)
    Strings werden in Java mit == auf Referenzgleichheit und nicht auf Wertegleichheit geprüft.
    Für den Wertevergleich immer equals nutzen!

    Ich finde es nur leider blöd, dass sich dies nicht ändern wird...

    T-Virus
     
  5. nighT

    nighT Guest

    Da equals Teil der object-Klasse ist (Oberklasse aller Klassen), kannst du es auch überschreiben und damit das Problem umgehen.
     
  6. Penta

    Penta Boardmaler

    Dabei seit:
    14.05.2007
    Beiträge:
    176
    Zustimmungen:
    0
    Ort:
    Berlin
    Wie kann ich das überschreiben, wie gesagt ich bin noch nicht gut in Java.
     
  7. #6 Plinzen, 21.03.2011
    Plinzen

    Plinzen Foren As

    Dabei seit:
    11.04.2007
    Beiträge:
    96
    Zustimmungen:
    0
    Du müsstest eine Methode equals in deine Klasse aufnehmen.
    In etwas so:
    Code:
    	/*
    	 * (non-Javadoc)
    	 * @see java.lang.Object#equals(java.lang.Object)
    	 */
    	@Override
    	public boolean equals(Object obj) {
    		return true; // Check this object against another one for equality.
    	}
    Allerdings ist das bei deinem Problem völlig nutzlos, da die String-Klasse die equals-Methode schon von Haus aus überschreibt... http://www.docjar.com/html/api/java/lang/String.java.html

    Grundsätzlich gilt für Strings (und andere Object): Für Vergleiche auf Wertebene immer equals verwenden. Für Vergleiche auf Referenzen (unveränderliche Pointer) sollte man "==" verwenden.

    Weitere Informationen findest du hier: http://openbook.galileocomputing.de...04_002.htm#mj5ee730cda1f64998edf27bd440d36bf1

    cu
     
  8. #7 saeckereier, 22.03.2011
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Naja, was nighT geschrieben hat, war auch relativ falsch, das Problem kann er damit gar net lösen. Gleicheit prüft man mit equals. Punkt. Objektidentität mit ==. Primitive Typen leider doch mit ==, weils eben keine Objekte sind (int, float, ... Doofes Java..)

    Eigene Objekte sollten equals sauber implementieren. Die Standardimplementierung aus Object prüft auf Objektidentität. Also wenn man nix anderes programmiert, dann wird bei equals intern == verwendet.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 T-Virus, 22.03.2011
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    So sieht es aus.
    Finde ich trotzdem doof da bestimmt über 90% aller Vergleiche nur auf den Wert und nicht auf die Referenz geprüft werden.
    In .Net hat man dies besser gelöst.
    Dort gibt es die Methode ReferenceEqual um die Referenzgleichheit zu prüfen.
    Werte können dort zwar auch mit Equals aber eben auch mit == geprüft werden.

    Hier macht Java eigentlich einen dummen Fehler.

    T-Virus
     
  11. #9 saeckereier, 22.03.2011
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Fehler würde ichs nicht nennen auch die .Net Methode ist gefühlt nicht viel besser. In Smalltalk gibts ~= und =. Und man kann beide so programmieren wie man möchte weils ganz normale Methoden sind.
     
Thema:

Input == String => false

Die Seite wird geladen...

Input == String => false - Ähnliche Themen

  1. 12V Input USB HUB für Raspberry Pi

    12V Input USB HUB für Raspberry Pi: Moin, weiß zwar das es extra Foren für sowas gibt, aber bevor ich mich nur für die Frage da extra anmelde. Und zwar suche ich ein (powerd)...
  2. Artikel: Einstieg in LIRC mit inputlirc

    Artikel: Einstieg in LIRC mit inputlirc: Verfügt der Computer bzw. die Sound- oder DVB/TV-Karte über einen Infrarot-Empfänger, kann der Computer via Infrarot-Fernbedienung bedient werden,...
  3. FreeBSD Security Advisory - Linux Input Validation

    FreeBSD Security Advisory - Linux Input Validation: FreeBSD Security Advisory - FreeBSD is binary-compatible with the Linux operating system through a loadable kernel module/optional kernel...
  4. USB-Input verarbeiten

    USB-Input verarbeiten: Hallo Leute, ich suche ein Modul um eine USB-Input zu verarbeiten. Ich will über USB Datenpakete senden, diese dann in analoge Signale...
  5. iptables user defined chain in INPUT einbinden--wie?

    iptables user defined chain in INPUT einbinden--wie?: Hallo allerseits, Wie kann ich eine User Chain in die INPUT einbinden, ich finde da unter man nichts, nur wie ich diese user chain anlege....