Guardando l'implementazione dell'hashmap di java, non è in grado di comprendere il motivo dietro alcune linee. Nel codice qui sotto copiato da here, nella riga 365-367, non sono in grado di capire perché hanno fatto prima l'assegnazione di e.key a k e poi ho confrontato == con il tasto chiave [(k = e.key) == ]. Perché non farlo direttamente (e.key == chiave). Questo modello appare più volte nel codice.nella chiave di implementazione di hashmap java viene prima assegnato all'oggetto e quindi confrontato
359
360 final Entry<K,V> getEntry(Object key) {
361 int hash = (key == null) ? 0 : hash(key.hashCode());
362 for (Entry<K,V> e = table[indexFor(hash, table.length)];
363 e != null;
364 e = e.next) {
365 Object k;
366 if (e.hash == hash &&
367 ((k = e.key) == key || (key != null && key.equals(k))))
368 return e;
369 }
370 return null;
371 }
Bene, usano il valore di k nell'altra parte della condizione, ma potrebbero aver scritto '(e.key == chiave || (chiave! = Null && key.equals (e.key))) 'invece ed elimina la variabile' k'. Non vedo quale sia il vantaggio di introdurre quella variabile locale. – Eran
Esattamente, ma in molte situazioni simili in tutto il codice hanno seguito religiosamente la creazione di una nuova variabile locale. – Nitiraj
Vedere http://stackoverflow.com/questions/10180656/why-is-lock-captured-to-a-alocal-variable, http://stackoverflow.com/questions/2785964/in-arrayblockingqueue-why-copy- final-member-field-in-local-final-variable, http://stackoverflow.com/questions/28975415/why-jdk-code-style-uses-a-variable-assignment-and-read-on-the- same-line-eg-i ... – Marco13