Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
I øvrigt kan man blive snydt hvis man ikke ved hvor strengen kommer fra!! Bare til almindelig advarsel (der har været to String.equals(String) spørgsmål i rap så jeg synes det er på sin plads). Prøv at kompiler det her. public class Exp329094 {
Eksemplet er faktisk lidt rasmus modsat. Jeg bruger det når jeg skal have to variabler med ellers ens strenge til at blive false. Eksempelvis hvis to JButtons har samme label.
Javas == operator brugt på objecter sammenligner kun object-referencer, og giver derfor true i tilfældet s1 = "test"; s2 = s1; System.out.println(s1==s2); men burde således også fejle med String s1 = "brian"; String s2 = "brian"; System.out.println(s1==s2); men det gør den ikke.
Forklaringen er den at java vm'en har en særlig string-pulje (af optimeringshensyn). Dette er noget vm'en kan gøre som følge af at String objectet er "imutable" dvs. uforanderligt (dets værdi kan ikke ændres under programkørsel) Hvis du opretter strenge via konstanter således at de er defineret på kompileringstidspunktet dvs. f.eks. String s1 = "test"; String s2 = "tester" + " igen"; String s3 = "og "+s2; så vil den oprette hver entydig streng i strengpuljen netop en gang. Laver du således to ens stenge som : String s1 = "test"; String s2 = "te"+"st"; så vil der kun blive oprettet 1 streng i puljen, og begge object-referencer peger på denne. Dette vil så give det - principielt forkerte - svar 'true' ved sammenligning af s1 og s2 med == operatoren. Endnu en af de hærlige undtagelser der er i java omkring netop String :-)
Jeg håber du er blevet klogere af denne forklaring og at det ikke er alt for rodet og forvirende.
Du kan altså principielt godt sammenligne strenge med == men hvis du vil have den effekt man normalt ønsker, skal du bruge equals istedet. Equals er iøvrigt implementeret specifikt på String til at lave fornuftig sammenligning, hvorimod næsten alle andre objecter nedarver metoden fra object hvor den er implementeret som en simpel == sammenligning.
To sum up:
== sammenligner referencer, og de er ens i dit tilfælde, da du har sat den ene streng lig den anden. D.v.s. at begge referencer peger på det samme. Hvis du ændrer på på den ene, ændrer du samtidigt den anden.
Når du vil sammeligne indhold af to forskellige strenge SKAL du bruge equals. Det andet virker ikke.
compareTo fortæller om den første streng er <, = eller > den anden.
Indicates whether some other object is "equal to" this one.
...
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes. ----
så Object equals er det samme som ==.
og
equals returnerer true betyder at hashCode returnerer samme værdi
men hashCode returnerer samme værdi betyder ikke at equals returnerer true.
Undskyld........Jeg har helt glemt at acceptere..:-( ja jeg fik det til at virke ved første forsøg
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.