/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
== operatoren??
Fra : Martin Ehmsen


Dato : 24-04-02 15:33

Hej...

Jeg sidder netop og kigger på noget kode som efter min mening ikke burde
fungere.
Det essentielle i koden er følgende:

// Dette går godt og man får JUBII ud på skærmen
String str = "Tekst";
if( str == "Tekst" )
System.out.println( "JUBII" );
else
System.out.println( "NEJ" );

Mens følgende ikke går godt:

// Dette går ikke godt om man får NEJ ud på skærmen
String str = new String( "Tekst" );
if( str == "Tekst" )
System.out.println( "JUBII" );
else
System.out.println( "NEJ" );

Jeg forstår ikke den opførsel af java...
Det er ikke min egen kode, og det er klart at denne brug af ==
operatoren er imod al god programmerings skik ( str.equals( "Tekst" ) er
mere efter bogen ), men jeg kunne godt tænke mig at vide hvorfor det går
godt??

Martin
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
   Linus Torvalds

 
 
Thorbjørn Ravn Ander~ (24-04-2002)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 24-04-02 15:43

Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

> Det er ikke min egen kode, og det er klart at denne brug af ==
> operatoren er imod al god programmerings skik ( str.equals( "Tekst" ) er
> mere efter bogen ), men jeg kunne godt tænke mig at vide hvorfor det går
> godt??

I første eksempel har compileren mulighed for at lade de to String
objekter indeholdende "Tekst" være ens (det er konstanter så det kan
den godt), hvorefter == opfyldes.

I den anden er du garanteret et nyoprettet objekt, og det er ikke det
samme som det compileren oprettede da den oversatte dit program.
Derfor er de forskellige.

--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn

Mikkel Bundgaard (24-04-2002)
Kommentar
Fra : Mikkel Bundgaard


Dato : 24-04-02 15:44

Martin Ehmsen <ehmsen@imada.sdu.dk> wrote:
> Hej...
>
> Jeg sidder netop og kigger på noget kode som efter min mening
> ikke burde fungere.
> Det essentielle i koden er følgende:
>
> // Dette går godt og man får JUBII ud på skærmen
> String str = "Tekst";
> if( str == "Tekst" )
> System.out.println( "JUBII" );
> else
> System.out.println( "NEJ" );
>
> Mens følgende ikke går godt:
>
> // Dette går ikke godt om man får NEJ ud på skærmen
> String str = new String( "Tekst" );
> if( str == "Tekst" )
> System.out.println( "JUBII" );
> else
> System.out.println( "NEJ" );
>
> Jeg forstår ikke den opførsel af java...
> Det er ikke min egen kode, og det er klart at denne brug af ==
> operatoren er imod al god programmerings skik ( str.equals(
> "Tekst" ) er mere efter bogen ), men jeg kunne godt tænke mig at
> vide hvorfor det går godt??
>
> Martin
Hej Martin
Se "Java Language Specification" §3.10.5
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.h
tml
eller den sidste del af dette gode svar fra Jonas Kongslund
http://groups.google.com/groups?hl=da&c2coff=1&selm=3B0842A0.44ED457
2%40dev.null
--
Mikkel Bundgaard
IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum



Martin Ehmsen (24-04-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 24-04-02 23:02

Mikkel Bundgaard <mikkelbu@teliamail.dk> wrote:
> Se "Java Language Specification" §3.10.5
> http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.h
> tml
> eller den sidste del af dette gode svar fra Jonas Kongslund
> http://groups.google.com/groups?hl=da&c2coff=1&selm=3B0842A0.44ED457
> 2%40dev.null

Tak for det fine svar...
Man lærer åbenbart noget nyt om Java hver dag. Jeg kan godt se det er
smart set fra Java's synspunkt (hvis den kan have et sådant , men vi
er vel stadig enig om at det er _meget_ dårlig programmerings praksis.

Martin
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
   Linus Torvalds

Soren 'Disky' Reinke (25-04-2002)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 25-04-02 00:02


"Martin Ehmsen" <ehmsen@imada.sdu.dk> wrote in message
news:aa7a1h$csp$1@sunsite.dk...
> Mikkel Bundgaard <mikkelbu@teliamail.dk> wrote:
> > Se "Java Language Specification" §3.10.5
> > http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.h
> > tml
> > eller den sidste del af dette gode svar fra Jonas Kongslund
> > http://groups.google.com/groups?hl=da&c2coff=1&selm=3B0842A0.44ED457
> > 2%40dev.null
>
> Tak for det fine svar...
> Man lærer åbenbart noget nyt om Java hver dag. Jeg kan godt se det er
> smart set fra Java's synspunkt (hvis den kan have et sådant , men vi
> er vel stadig enig om at det er _meget_ dårlig programmerings praksis.

Yep dårlig praksis at bruge == til strings, det fremmer bestemt ikke
læsbarheden af koden.

Hvis jeg husker rigtigt checker .equals() faktisk med == som det allerførste


--
With many Thanks
Soren ' Disky ' Reinke ICQ #1413069 remove 'ihsyd' when email replying
Please visit my Freshwater Aquaria Webpage
http://www.disky-design.dk/fish



Thorbjørn Ravn Ander~ (25-04-2002)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 25-04-02 07:00

Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

> er vel stadig enig om at det er _meget_ dårlig programmerings praksis.

Næh, man skal bare være klar over at == sammenligner på
Objektreferencen (er det _samme_ objekt) og .equals sammenligner på
indholdet (indeholder objekterne det samme), og at .equals normalt
tilpasses de enkelte typer for at give bedre mening.

At man så er vant til at bruge == i andre sprog, er bare en af
standardfælderne.

--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn

Martin Ehmsen (25-04-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 25-04-02 13:36

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> wrote:
> Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

>> er vel stadig enig om at det er _meget_ dårlig programmerings praksis.

> Næh, man skal bare være klar over at == sammenligner på
> Objektreferencen (er det _samme_ objekt) og .equals sammenligner på
> indholdet (indeholder objekterne det samme), og at .equals normalt
> tilpasses de enkelte typer for at give bedre mening.

> At man så er vant til at bruge == i andre sprog, er bare en af
> standardfælderne.

Det var overhovedet ikke det jeg mente.
Jeg udtalte mig om at jeg synes det er meget dårlig programmering
praksis, at udnytte en spidsfindighed i Java (at den internt gemmer
literals i en pulje) til at skrive et program, hvor .equals ville have
lette læseligheden og forståeligheden væsentligt.
At udnytte den slags små "huller" i Java er efter min mening dårlig
programmerings praksis.

Martin
--
I log into "FUCKYOU", (the help-desk enquiries username) and go into
mail.
   BOFH

Thorbjørn Ravn Ander~ (25-04-2002)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 25-04-02 15:08

Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

> Jeg udtalte mig om at jeg synes det er meget dårlig programmering
> praksis, at udnytte en spidsfindighed i Java (at den internt gemmer
> literals i en pulje) til at skrive et program, hvor .equals ville have
> lette læseligheden og forståeligheden væsentligt.

Var det ikke et forståelsesproblem der blev spurgt til?

Og et demoprogram som skulle vise hvorfor man var i tvivl? Det kan du
da ikke begynde på den slags med?
--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn

Filip Larsen (25-04-2002)
Kommentar
Fra : Filip Larsen


Dato : 25-04-02 19:24

Martin Ehmsen skrev

> Jeg udtalte mig om at jeg synes det er meget dårlig programmering
> praksis, at udnytte en spidsfindighed i Java (at den internt gemmer
> literals i en pulje) til at skrive et program, hvor .equals ville have
> lette læseligheden og forståeligheden væsentligt.

Hvis du mener at kanoniske referencer er dårlig programmeringspraksis så er
vi uenige. Vi kan dog godt blive enige om, at strengliteraler lever livet
som en slag skabs-kanoniske referencer. Måske burde Sun lade dem komme noget
mere ud af skabet?


Mvh,
--
Filip Larsen <filip.larsen@mail.dk>



Mogens Hansen (25-04-2002)
Kommentar
Fra : Mogens Hansen


Dato : 25-04-02 21:19


"Martin Ehmsen" <ehmsen@imada.sdu.dk> wrote in

>
> Tak for det fine svar...
> Man lærer åbenbart noget nyt om Java hver dag.

Måske er
http://www.cuj.com/java/articles/a19.htm?topic=java
interessant i denne sammenhæng.

Venlig hilsen

Mogens Hansen





Dennis Thrysøe (24-04-2002)
Kommentar
Fra : Dennis Thrysøe


Dato : 24-04-02 19:32

Sådan som jeg husker det skyldes det, at compileren intern'er
streng-konstanter. Compileren genbruger altså de samme String instanser
- bortset selvfølgeligt fra når programmøren eksplicit beder om at få
lavet et nyt med 'new' operatoren.

-dennis



Martin Ehmsen wrote:
> Hej...
>
> Jeg sidder netop og kigger på noget kode som efter min mening ikke burde
> fungere.
> Det essentielle i koden er følgende:
>
> // Dette går godt og man får JUBII ud på skærmen
> String str = "Tekst";
> if( str == "Tekst" )
> System.out.println( "JUBII" );
> else
> System.out.println( "NEJ" );
>
> Mens følgende ikke går godt:
>
> // Dette går ikke godt om man får NEJ ud på skærmen
> String str = new String( "Tekst" );
> if( str == "Tekst" )
> System.out.println( "JUBII" );
> else
> System.out.println( "NEJ" );
>
> Jeg forstår ikke den opførsel af java...
> Det er ikke min egen kode, og det er klart at denne brug af ==
> operatoren er imod al god programmerings skik ( str.equals( "Tekst" ) er
> mere efter bogen ), men jeg kunne godt tænke mig at vide hvorfor det går
> godt??
>
> Martin


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste