salut,

le titre reflète la conclusion que j'ai tiré ce matin apres que je suis tombé sur cette méthode 'equals()' et fait quelques petits tests que voici quelques unes d'elles:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
PS II> $a = ''
PS II> $b = [string]::empty

PS II> $a -eq $b
True

PS II> $a.Equals($b)
False
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS II> $a = 5
PS II> $b = '5'

PS II> $a -eq $b
True

PS II> $b -eq $a
True

PS II> $a.Equals($b)
False

PS II> $b.Equals($a)
False
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
PS II> [int32]$a = 1
PS II> [int64]$b = 1

PS II> $a -eq $b
True

PS II> $a.Equals($b)
False
d'après ces tests, l'opérateur '-eq' fait une conversion automatique de type si necessaire, tandis que la méthode equals() ne fait aucune conversion, elle compare la valeur et le type à la fois...ceci explique la lenteur de la boucle '1'

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
# boucle 1
PS II> measure-command {for($i=0; $i -lt 1000000; $i++) {$i.equals($i)}}
 ~ 19671,6705 ms

# bouclle 2
PS II> measure-command {for($i=0; $i -lt 1000000; $i++) {$i -eq $i}}
~ 6741,3699 ms

mais, si on on mets des guillemets à la variable "$i" l'opérateur '-eq' va d'abord convertir "$i" en [int] puis va comparer les deux valeurs, ceci explique sa lenteur dans ce deuxieme test:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
PS II> measure-command {for($i=0; $i -lt 1000000; $i++) {"$i" -eq $i}}
~ 18443,051 ms