Socket Gleiche String ungleich?

TechnoObi

Mitglied
Hallo!

Ja, ich weiß. Der Titel klingt komisch. Aber es wird sich gleich klar stellen. Hier erstmal der Code:

Code:
//Server
InputStream inClient = client.getInputStream();
            DataInputStream in = new DataInputStream(inClient);
           DataOutputStream os = new DataOutputStream(client.getOutputStream());
            while(true){
                String str ="";
               while ((str = in.readUTF()) != null) {
                   System.out.println("The message: " + str);
                   if(str == "test")System.out.println("JUHU");
                   os.writeUTF("test");
               }
               Thread.sleep(100);
            }
//Client
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
input = "test";
os.writeUTF(input);
os.flush();
String str = "";
InputStream inFromServer = socket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
while((str = in.readUTF()) != null) {
    Log.d("INPUT", str);
    if(str == "test")Log.d("Juhu", "Juhu");
}

Also jetzt zur richtigen Erklärung. Ich sende bei beiden den String "test" und überprüfe auch auf "test". Aber es gibt einfach kein true zurück. Wenn ich den String zerlege und in Ascii umwandle, dann kommen die richtigen Werte. Aber es kann doch nicht sein, dass ich hier kein true zurück bekomme, oder?

Und dann noch eine zweite Frage am Rande. Ist DataOutputStream gut? Ich habe auch schon PrintWriter versucht (hat auch nicht geklappt) aber benutze jetzt DOS. Was ist besser? Oder gibt es noch eine bessere Alternative?
 

InfectedBytes

Top Contributor
In Java ist String kein primitiver Datentyp und somit ein Object. Objects werden mit Object::equals verglichen.
Kleine Ergänzung: Strings sind typischerweise auch in anderen Sprachen keine primitiven Typen, allerdings erlauben andere Sprachen den == Operator zu überladen und tun dies eben für die String Klasse.
Java erlaubt dies leider nicht :(
 

TechnoObi

Mitglied
Kleine Ergänzung: Strings sind typischerweise auch in anderen Sprachen keine primitiven Typen, allerdings erlauben andere Sprachen den == Operator zu überladen und tun dies eben für die String Klasse.
Java erlaubt dies leider nicht :(
Ja, leider. Bis jetzt hat es bei mir immer gut geklappt, nur dann in Java nicht. Und an einen so primitiven Fehler denkt man gar nicht :)
 

InfectedBytes

Top Contributor
naja, es ist vermutlich der häufigste Fehler den Java Anfänger begehen und daher liefert jede Google suche die auch nur annähernd in die richtige Richtung geht sofort die Lösung dafür
 

Andy17

Aktives Mitglied
Das berühmte '==' vergleicht Referenzen. Die Methode equals() vergleicht den Wert. Du kannst auch noch solche Späße wie das relativ unbekannte Objects.equals(arg0, arg1) nutzen. Das ist nullsafe. Und es gibt auch noch solche Späße wie deepEquals.. Für deinen Anwendungsfall sollte das mit equals() aber getan sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T RMI Methodenaufrufe mit unterschiedlichen parametern liefern gleiche Ergebnisse Netzwerkprogrammierung 8
V Socket#getInputStream() immer der gleiche oder nicht? Netzwerkprogrammierung 4
G immer wieder gleiche Sockets Netzwerkprogrammierung 2
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
N Name eines Attributes aus einem festen String und einer Variablen generieren Netzwerkprogrammierung 5
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
F String in Datenbank speichern Netzwerkprogrammierung 1
I RMI String Netzwerkprogrammierung 2
precoc String Array versenden Netzwerkprogrammierung 7
T Socket String zu Socket Netzwerkprogrammierung 26
7 String an Server Netzwerkprogrammierung 2
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
S WebService, 4-stelliger String (Jahr) als Calendar Netzwerkprogrammierung 5
M String an PHP Script aus Java übergeben Netzwerkprogrammierung 12
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Messenger - String oder Objekte Netzwerkprogrammierung 4
T Socket Nullterminierten String lesen Netzwerkprogrammierung 4
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
N Socket Stream in String Netzwerkprogrammierung 4
J Browser-String angeben Netzwerkprogrammierung 5
S String[] über Socket senden Netzwerkprogrammierung 3
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
G String in InetAddres umwandeln klappt nicht Netzwerkprogrammierung 5
A String per ByteBuffer empfangen? Netzwerkprogrammierung 6
ModellbahnerTT Problem feste String ins Netzwerk zu geben Netzwerkprogrammierung 5
G UTF-8 in STring umwandeln oder umgedreht Netzwerkprogrammierung 12
F String in eine URL umwandeln Netzwerkprogrammierung 7
P string over net Netzwerkprogrammierung 4
T Html-Source über URL in einen String speichern? Netzwerkprogrammierung 16
B HEX String zu einem Byte Array ? *verzweiflung* :( Netzwerkprogrammierung 16
K String zurück liefern ! Netzwerkprogrammierung 4
S SSLSocketFactory.createSocket(String hostname, int port),wo? Netzwerkprogrammierung 5
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
C gesendeten String einlesen Netzwerkprogrammierung 3
G String to Socket ? Netzwerkprogrammierung 3
A StringCorruptedException: invalid String header Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben