2016-03-07 2 views
0

Ces deux termes sont toujours restés dans mon esprit. Sont-ils logiquement identiques ou complètement différents? Par exemple, dans Java livre: Introduction à la programmation par Liang, il dit:Est-ce que "équivalent" est identique à "égal" (ou "égal absolu")?

Vous pouvez utiliser une classe générique sans spécifier un type de béton comme ceci:

GenericStack stack = new GenericStack(); // raw type

C'est à peu près équivalent à

GenericStack<Object> stack = new GenericStack<Object>();

Répondre

1

Il existe plusieurs niveaux d'égalité. Habituellement, ils sont désignés par des mots comme "égal" ou "équivalent". Ce que ces mots signifient exactement dépend du contexte, mais généralement l'égalité implique l'équivalence, mais pas l'inverse.

Par exemple, avec deux morceaux de code A et B, on pourrait dire que A et B sont égales si elles consistent exactement les mêmes caractères, et dire qu'ils sont équivalents si nous peut toujours remplacer A par B, et vice versa, sans changer le comportement du programme. Si nous faisons cela,

int i; 
i = 10; 

et

int i = 10; 

ne sont pas égaux mais équivalent.

Les deux extraits de code de votre devis sont appelés "à peu près équivalents" par l'auteur. Le mot «grossièrement» suggère qu'ils ne sont pas du tout équivalents. Et en effet:

GenericStack stack = new GenericStack(); 
GenericStack<String> stack2 = stack; 

compiles (avec un avertissement), alors que

GenericStack<Object> stack = new GenericStack<Object>(); 
GenericStack<String> stack2 = stack; 

ne fonctionne pas. Ce que l'auteur veut dire par "à peu près équivalent" est que le type brut se comporte comme un GenericStack<Object> dans de nombreux cas, mais pas dans tous. En particulier, vous pouvez y mettre n'importe quel objet.