Originariamente inviato da John360
codice:
BigInteger bifatt = BigInteger.valueOf(1);
for(long i=n; i >= 1; i--){
BigInteger bii = BigInteger.valueOf(i);
bifatt = bifatt.multiply(bii);
}
System.out.println(n+"!=" + bifatt);
Perfetto.
Originariamente inviato da John360
solo che non capisco una cosa... nel for viene modificato più volte la variabile del fattoriale... mentre tu prima mi hai detto che i bigI sono immutabili, in che senso sono immutabili?
Un oggetto immutabile si dice tale se il suo "stato" interno (cioè l'insieme dei suoi campi di istanza) non può cambiare, principalmente perché nessuno dei metodi che l'oggetto offre all'esterno permette di effettuare modifiche.
Per la seguente classe Persona:
codice:
public class Persona {
private String nome;
public Persona(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
Gli oggetti di questa classe sono "immutabili". Ed è facile capire il perché:
- L'unico punto dove imposta il campo è nel costruttore, per la inizializzazione ovviamente.
- Il campo è "private", dall'esterno non è accessibile direttamente.
- Esiste il getNome() ma NON esiste un setNome(String nome).
Una volta che hai costruito un oggetto Persona, il suo stato non può essere cambiato ... è "immutabile".
codice:
Persona p1 = new Persona("Pippo");
// come cambi lo stato?
// p1.nome = "Paperino"; // Non puoi, il campo è private
// p1.setNome("Paperino"); // Non puoi, non esiste setNome
Per quanto riguarda il tuo dubbio sulla assegnazione:
bifatt = bifatt.multiply(bii);
Non devi confonderti. La variabile bifatt è un "reference", contiene solo un riferimento ad un oggetto (oppure null=nessun oggetto).
Se poco prima bifatt faceva riferimento ad un oggetto BigInteger di valore X, dopo la assegnazione bifatt fa riferimento ad un nuovo oggetto BigInteger di valore Y, perché ti è stato restituito un nuovo oggetto dal multiply.
E il vecchio BigInteger di valore X che fine ha fatto? Se non hai tenuto il reference in qualche altra variabile (e nel tuo codice non è così), l'oggetto viene "perso" (non è più raggiungibile) e finirà prima o poi in pasto al GC, Garbage Collection per recuperare quello spazio di memoria.
Ma tutto questo non vuol dire che lo stato sia "mutabile"!