Attention ! Billet en cours de rédaction.

Créons un tableau contenant cinq objets String :

1
2
3
4
5
tab_string = Array.new

5.times do
  tab_string << "string"
end

Créons un tableau contenant cinq objets Symbol :

1
2
3
4
5
tab_symbol = Array.new

5.times do
  tab_symbol << :symbol
end

Vérifions l’espace mémoire de chacunes des variables de chaque tableau :

Pour le tableau de String :

1
2
3
4
5
6
tab_string.each {|v| puts v.object_id }
24875790
24875780
24875770
24875760
24875750

Ici on peut voir que chaque objet String contenu dans le tableau tab_string aloue un espace mémoire différent (donc un identifiant d’objet différent) alors que l’objet String à la même valeur : “string”.

Pour le tableau de Symbol:

1
2
3
4
5
6
tab_symbol.each {|v| puts v.object_id }
244098
244098
244098
244098
244098

Pour le tableau de Symbol, c’est différent. On s’aperçoit que chaque objet Symbol contenu dans le tableau tab_symbol appartiennent au même espace mémoire.