Przekazanie typu podstawowego przez referencję

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:

 
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 ?

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").

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).

1 użytkowników online, w tym zalogowanych: 0, gości: 1