Hva er et uforanderlig objekt?
Et uforanderlig objekt er et objekt som ikke kan endres når det først er opprettet. Med andre ord kan objektets tilstand ikke endres etter at det er blitt instansiert. Ethvert forsøk på å endre verdien fører til at det opprettes et nytt objekt med den oppdaterte verdien, mens det opprinnelige objektet forblir uendret.
Dette konseptet brukes ofte i programmeringsspråk som støtter funksjonell programmering, der uforanderlighet er en nøkkelfunksjon. Uforanderlige objekter er nyttige i situasjoner der tilstanden til et objekt ikke bør endres, for eksempel i flertrådede miljøer der samtidig tilgang til foranderlige objekter kan føre til kappløp og datakorrupsjon.
Uforanderlige objekter har flere fordeler fremfor foranderlige objekter. For det første er de trådsikre og kan trygt deles mellom tråder uten behov for synkronisering. For det andre er de enklere å resonnere om, siden tilstanden deres ikke kan endres uventet. For det tredje kan de brukes som nøkler i hashtabeller og sett, siden hashverdien er fast og ikke endres over tid.
Eksempler på uforanderlige objekter i Java inkluderer String, Integer og LocalDate. Når et String-objekt er opprettet, kan verdien ikke endres. Ethvert forsøk på å endre den resulterer i at det opprettes et nytt String-objekt med den oppdaterte verdien. På samme måte kan ikke verdien til et Integer-objekt endres når det først er opprettet.
Uforanderlige objekter er imidlertid ikke egnet i alle situasjoner. I noen tilfeller er muterbare objekter mer hensiktsmessige, for eksempel når tilstanden til et objekt må oppdateres ofte. I slike tilfeller er det viktig å sørge for at tilgangen til muterbare objekter er synkronisert for å forhindre kappløp og datakorrupsjon.
Oppsummert er et uforanderlig objekt et objekt som ikke kan endres når det først er opprettet. Det er nyttig i situasjoner der tilstanden til et objekt ikke bør endres, for eksempel i flertrådede miljøer. Uforanderlige objekter har flere fordeler i forhold til foranderlige objekter, blant annet trådsikkerhet, enkel resonnering og egnethet som nøkler i hashtabeller og sett.