|
| Typecast eller polymorfi ? Fra : Project apixs |
Dato : 13-09-01 11:05 |
|
Af ren nysgerrighed:
Såfremt man har et Object myObj der i virkeligheden er en String og skal
have skrevet teksten i fx et JTextArea med metoden setText(String nytekst)
der tager en String som parameter, hvad ville så være det mindst
ineffektive:
- At typecast Object til String a'la setText( (String)myObj ) eller
- At benytte polymorfi og kalde toString metoden på myObj setText(
myObj.toString() )
Sagt på en anden måde, hvad tager længst tid: At typecaste eller at lave et
polymorft metodekald?
/ Bjarne
| |
Brian Matzon (13-09-2001)
| Kommentar Fra : Brian Matzon |
Dato : 13-09-01 11:28 |
|
"Project apixs" <project@innovazion.dk> wrote in message news:9nq0bl$heu$1@sunsite.dk...
> Af ren nysgerrighed:
> Såfremt man har et Object myObj der i virkeligheden er en String og skal
> have skrevet teksten i fx et JTextArea med metoden setText(String nytekst)
> der tager en String som parameter, hvad ville så være det mindst
> ineffektive:
> - At typecast Object til String a'la setText( (String)myObj ) eller
> - At benytte polymorfi og kalde toString metoden på myObj setText(
> myObj.toString() )
>
> Sagt på en anden måde, hvad tager længst tid: At typecaste eller at lave et
> polymorft metodekald?
Hmm ikke ret sikker, men jeg vil mene at setText(myObj.toString())
(eller bare setText(myObj) ?) burde være hurtigst, idet der ikke skal laves
en temporer reference til en String...
/Brian Matzon
| |
Ulrik Magnusson (13-09-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 13-09-01 18:16 |
|
Project apixs wrote:
> Af ren nysgerrighed:
> Såfremt man har et Object myObj der i virkeligheden er en String og skal
> have skrevet teksten i fx et JTextArea med metoden setText(String nytekst)
> der tager en String som parameter, hvad ville så være det mindst
> ineffektive:
> - At typecast Object til String a'la setText( (String)myObj ) eller
> - At benytte polymorfi og kalde toString metoden på myObj setText(
> myObj.toString() )
>
> Sagt på en anden måde, hvad tager længst tid: At typecaste eller at lave et
> polymorft metodekald?
Du mener vel: at typecaste eller bruge toString() metoden? Jeg tror ikke, du
vil finde et autoriseret svar på det - det afhænger vel af toString() metoden.
Et godt gæt vil nok være at en grundoperation som fx en konvertering
i de fleste tilfælde er hurtigere end et metodekald.
Du kan teste det med nedenstående.
class Test
{
static void f( String s )
{}
public static void main( String[] args )
{
long start = System.currentTimeMillis();
Object s = "hello";
for( int i = 0; i < 1000000000; i++ )
{
f( (String)s );
}
System.out.println( "Cast:\t\t" + (System.currentTimeMillis()-start) +
" ms." );
start = System.currentTimeMillis();
for( int i = 0; i < 1000000000; i++ )
{
f( s.toString() );
}
System.out.println( "toString():\t" +
(System.currentTimeMillis()-start) + " ms." );
}
}
output:
Cast: 33290 ms.
toString(): 54490 ms.
NB! prøv at indsætte denne linie:
if( s instanceof String)
umiddelbart før linien:
f( (String)s );
Ulrik Magnusson
| |
Birthe & Bjarne (13-09-2001)
| Kommentar Fra : Birthe & Bjarne |
Dato : 13-09-01 20:13 |
|
Jeg mener polymorfi i den forstand at String overskriver / overloader
toString() metoden ellers ville toString() kaldet returnere en streng af
vrøvl fx: java.lang.Object@92c278.
/Bjarne
"Ulrik Magnusson" <ulrikm@yahoo.com> wrote in message
news:3BA0E9C1.2C4109FE@yahoo.com...
> Project apixs wrote:
>
> > Af ren nysgerrighed:
> > Såfremt man har et Object myObj der i virkeligheden er en String og skal
> > have skrevet teksten i fx et JTextArea med metoden setText(String
nytekst)
> > der tager en String som parameter, hvad ville så være det mindst
> > ineffektive:
> > - At typecast Object til String a'la setText( (String)myObj ) eller
> > - At benytte polymorfi og kalde toString metoden på myObj setText(
> > myObj.toString() )
> >
> > Sagt på en anden måde, hvad tager længst tid: At typecaste eller at lave
et
> > polymorft metodekald?
>
> Du mener vel: at typecaste eller bruge toString() metoden? Jeg tror ikke,
du
> vil finde et autoriseret svar på det - det afhænger vel af toString()
metoden.
> Et godt gæt vil nok være at en grundoperation som fx en konvertering
> i de fleste tilfælde er hurtigere end et metodekald.
>
> Du kan teste det med nedenstående.
>
> class Test
> {
> static void f( String s )
> {}
> public static void main( String[] args )
> {
> long start = System.currentTimeMillis();
> Object s = "hello";
> for( int i = 0; i < 1000000000; i++ )
> {
> f( (String)s );
> }
> System.out.println( "Cast:\t\t" +
(System.currentTimeMillis()-start) +
> " ms." );
> start = System.currentTimeMillis();
> for( int i = 0; i < 1000000000; i++ )
> {
> f( s.toString() );
> }
> System.out.println( "toString():\t" +
> (System.currentTimeMillis()-start) + " ms." );
> }
> }
>
>
> output:
> Cast: 33290 ms.
> toString(): 54490 ms.
>
> NB! prøv at indsætte denne linie:
> if( s instanceof String)
> umiddelbart før linien:
> f( (String)s );
>
>
> Ulrik Magnusson
>
| |
|
|