[Java] String uit een showInputDialog vergelijken

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik voel gewoon dat dit een enorm simpele vraag is... en ik heb dan ook flink gezocht maar kan nergens het antwoord vinden. Het gaat er om dat ik de String uit een showInputDialog met een andere string wil vergelijken en daar toch een verschil in blijft zitten ook al zijn ze volgens mij gelijk. De enige voorbeelden die ik op internet kon vinden werd de string in een integer omgezet .. en dat lukt mij ook wel.
Maar dit lukt dus niet:


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import javax.swing.JOptionPane;

public class Test
{
    public static void main(String args[])
    {
        JOptionPane myGUI = new JOptionPane();
        
        String msg = myGUI.showInputDialog("Type een bericht: ");
//      msg = msg+"";
        String exitmsg = "exit";
        
        String var1 = "exit";
        String var2 = "exit";
        
        if (var1 != var2)
        {
            System.out.println("var1 is ongelijk aan var2");
        }
        else
        {
            System.out.println("var1 is gelijk aan var2");
        }
        if (msg == exitmsg)
        {
            System.out.println("msg is gelijk aan 'exit'");
        }
        else
        {
            System.out.println("msg is niet gelijk aan 'exit' ["+msg+"]");
        }
    }
}


als ik als antwoord exit intype dan is de uitvoer hiervan:

var1 is gelijk aan var2
msg is niet gelijk aan 'exit' [exit]


wat ik dus niet snap is waarom msg niet gelijk is aan exitmsg... Het zijn beide Strings en bevatten beide exit :?

  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 15:19

Pinobigbird

doesn't share food!

Strings vergelijken doe je met:
Java:
1
String.equals(String)

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Een string is een object, de variabelen var1 en var2 bevatten alleen de verwijzing naar het geheugenadres waar het object is opgeslagen, dat is dus verschillend. Om de inhoud van strings te vergelijken doe je var1.equals(var2)

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
aha

maar waarom levert var1 == var2 dan wel True op?

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Daarop moet ik je helaas het antwoord schuldig blijven. Ik kan wel wat onzin verzinnen maar dat heeft ook geen zin :P. Misschien dat een van de javahova's hier meer over kan vertellen.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
String literals (Strings die je letterlijk in de tekst opschrijft) worden 'interned'. Hierdoor verwijzen String literals in dezelfde class altijd naar hetzelfde String object. Dit kan wat verwarring veroorzaken, maar het wordt allemaal wel netjes beschreven in de spec: 3.10.5 String Literals (zie voorbeeldje aan het eind van die sectie)

Edit: dit lijkt wel een aardige beschrijving van alles rond interning te zijn.

[ Voor 19% gewijzigd door mbravenboer op 23-11-2004 11:12 ]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
marty schreef op dinsdag 23 november 2004 @ 10:56:
aha

maar waarom levert var1 == var2 dan wel True op?
Omdat de Vm slim is en var1 en var2 gewoon lekker naar de zelfde constante laat wijzen. Deze optimalisatie is alleen gedaan per class en niet voor meerdere classes onderling:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
public class TestString {

   public static String constString = "value";

   public static void main( String[] args) {

      String compare = "value";

      //compare == TestString.constString; 
      //compare != OtherClass.constString;
   }
}

Java:
1
2
3
4
public class OtherClass {

   public static String constString = "value";
}

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

mbravenboer schreef op dinsdag 23 november 2004 @ 11:11:
... Hierdoor verwijzen String literals in dezelfde class altijd naar hetzelfde String object. ...
[mierenneuk]
Alleen als ze gelijk zijn.
[/mierenneuk]

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
thnx!
dat heeft een hoop verduidelijkt :)
Pagina: 1