Przekazanie typu podstawowego przez referencję

Przekazanie typu podstawowego przez referencję
Qbisiek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 160
0

Wiatam, mam następujący problem: Chciałbym przekazać do metody parametr typu podstawowego, tak aby kod wewnątrz metody zmieniał mój parametr. Wiem, że typy podstawowe nie są obiektami więc są przekazywane przez wartość ale wyczytałem, że można użyć obiektów zastępczych z klas takich jak Integer zamiast int Long zamiast long itd. Napisałem więc króciutki program testowy:

Kopiuj
 
public class tmp
{
    
    public static void main (String[] args)
    {
        Long a = new Long(123);
        tmp t = new tmp();
        t.changeA(a);
        
        System.out.print(a);
    }
    
    void changeA (Long a)
    {
        a = (long)345;
    }
}

Niestety nie działa tak jakbym chciał. Nie rozumiem czemu 'a' jest przekazywane przez wartość mimo, że jest obiektem klasy Long ?

ShookTea
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 629
0

Klasy Long, Integer itd. są tzw. "Klasami opakowań". Weź taką klasę (!) String - Możesz użyć zarówno String s = "bla" jak i String s = new String("bla").

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

W Javie jest coś takiego jak autoboxing czyli automatyczna zamiana inta na Integera i vice versa + analogicznie dla pozostałych prymitywów.

Każda referencja w Javie jest przekazywana przez wartość, więc by zmienić wartość Longa musiałbyś wykonać coś w stylu np:
jakiśLong.setValue(nowaWartość);
Tyle, że Long nie ma takiej metody, bo Long jest niemutowalny (immutable).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.