/ 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
Hvorfor skal "new" ikke bruges når der opr~
Fra : Thomsen


Dato : 06-12-01 19:55

Hvorfor skal "new" ikke bruges når der oprettes en ny String?
String er jo et object...

Dette spørgsmål stillede jeg min lærer, og han blev ret grøn i hovedet. Er
der en nørd der kan give mig svaret : )

Mvh,
Thomsen



 
 
Thorbjørn Ravn Ander~ (06-12-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 06-12-01 20:19

"Thomsen" <andersthomsen@mobilixnet.dk> writes:

> Hvorfor skal "new" ikke bruges når der oprettes en ny String?
> String er jo et object...
>
> Dette spørgsmål stillede jeg min lærer, og han blev ret grøn i hovedet. Er
> der en nørd der kan give mig svaret : )

Altså

   String s = "abc"

?

Fordi java-compileren nedenunder laver din new for dig. Ligeledes når
du "plusser" strenge sammen - her konstrueres egentlig diverse kald
til StringBuffer.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk

Mikkel Bundgaard (06-12-2001)
Kommentar
Fra : Mikkel Bundgaard


Dato : 06-12-01 21:25

"Thomsen" <andersthomsen@mobilixnet.dk> wrote in message
news:13QP7.120$d_3.23957611@news.orangenet.dk...
> Hvorfor skal "new" ikke bruges når der oprettes en ny String?
> String er jo et object...
>
> Dette spørgsmål stillede jeg min lærer, og han blev ret grøn i
hovedet. Er
> der en nørd der kan give mig svaret : )
>
> Mvh,
> Thomsen
Hej Thomsen

For en uddybning af Thorbjørns svar kan du se på følgende tråd
("Hvad er forskellen på String a = new String("bla"); og String a
= "bla"; ?"), der var for et lille år siden. Det ser dog ud til at
deja
ikke har fået alle indlæggene med, men de vigtigste er der.

http://groups.google.com/groups?hl=da&th=77b5f3fc9e81e18e&rnum=1

Håber du kan bruge det til noget .
--
Mikkel Bundgaard
IT University of Copenhagen
http://officehelp.gone.dk
ICQ# 116946261
Codito, Ergo Sum



Simon Mikkelsen (07-12-2001)
Kommentar
Fra : Simon Mikkelsen


Dato : 07-12-01 21:59

D. Thu, 6 Dec 2001 19:55:14 +0100 syntes "Thomsen"
<andersthomsen@mobilixnet.dk> at dk.edb.programmering.java skulle vide at
<13QP7.120$d_3.23957611@news.orangenet.dk>.

>Hvorfor skal "new" ikke bruges når der oprettes en ny String?
>String er jo et object...
>
>Dette spørgsmål stillede jeg min lærer, og han blev ret grøn i hovedet. Er
>der en nørd der kan give mig svaret : )

Det er af historiske årsager. I mange andre programmeringssprog håndteres
en String ikke som et objekt, men som en primitiv datatype (på linie med
int mf.). Derfor vil
String s = "streng";
give samme resultat som
String s = new String("streng");

selvom der dog vil være en anelse forskel i den bytekode der genereres.

--
Mvh. Simon Mikkelsen, ingeniørstuderende

www.zipstat.dk Gratis, reklamefri tæller/statistik til enhver hjemmeside
-Se bla. hvor dine besøgende kommer fra, og brug den usynlige tællerkode.

Jonas Kongslund (07-12-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 07-12-01 22:25

Simon Mikkelsen wrote:

> String s = "streng";
> give samme resultat som
> String s = new String("streng");
>
> selvom der dog vil være en anelse forskel i den bytekode der genereres.

Ja, sidstnævnte er dyrere at lave da der udføres et unødvendigt
konstruktionskald, hvilket nedenstående kode viser.

[jonas@zeta flaf]$ vi Foo.java
[jonas@zeta flaf]$ cat Foo.java
public class Foo {
public void foo()
{
String s = "streng";
}

public void bar()
{
String s = new String("streng");
}
}
[jonas@zeta flaf]$ javac Foo.java
[jonas@zeta flaf]$ javap -c Foo
Compiled from Foo.java
public class Foo extends java.lang.Object {
public Foo();
public void foo();
public void bar();
}

Method Foo()
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 return

Method void foo()
0 ldc #2 <String "streng">
2 astore_1
3 return

Method void bar()
0 new #3 <Class java.lang.String>
3 dup
4 ldc #2 <String "streng">
6 invokespecial #4 <Method java.lang.String(java.lang.String)>
9 astore_1
10 return
[jonas@zeta flaf]$

--
Jonas Kongslund <jonas(at)kongslund.dk> XNS: =Jonas Kongslund

When you want to change the world, you don't see the dawn by
getting up early - you see it by not sleeping through the night.

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste