Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    Java e scambio di valore attributi

    Stavo scrivendo un articolo per il mio blog riguardo al passaggio di parametri per valore e per indirizzo. Mi confermate anche voi che non posso (in nessun modo) effettuare lo swap dei valori di due attributi tramite un metodo?
    In C, grazie al passaggio dei parametri per indirizzo posso fare qualcosa del genere:
    codice:
    #include <stdio.h>
    
    void swap(int *, int *);
    
    int main()
    {
        int x = 2;
        int y = 4;
        printf("output: x=%d, y=%d\n", x, y); // output: x=2, y=4
        swap(&amp;x, &amp;y); // x e y sono parametri attuali di swap e sono gli indirizzi di x e y
        printf("output: x=%d, y=%d\n", x, y); // output: x=4, y=2
        return 0;
    }
    
    void swap(int *a, int *b) // a e b sono parametri formali di swap di tipo puntatore a intero
    {
       int tmp;
       tmp = *a;
       *a = *b;
       *b = tmp;
    }
    In Java, il passaggio per indirizzo non esiste. Posso creare un qualcosa di simile o devo per forza di cose sostituire il corpo di swap alla sua chiamata tra le due printf???? Io non vedo soluzioni chiedo a voi...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Java e scambio di valore attributi

    Originariamente inviato da Metallica
    Mi confermate anche voi che non posso (in nessun modo) effettuare lo swap dei valori di due attributi tramite un metodo?
    Un metodo non può cambiare il valore delle variabili che ha il chiamante (proprio perché in Java esiste solo il passaggio per valore). Volendo usare degli oggetti si potrebbe, al limite, scambiare lo "stato" dell'oggetto.

    codice:
    public class Prova {
        public static void main(String[] args) {
            Valore v1 = new Valore(10);
            Valore v2 = new Valore(50);
            System.out.println (v1.v + "  " + v2.v);
            swap(v1, v2);
            System.out.println (v1.v + "  " + v2.v);
        }
        
        public static void swap(Valore a, Valore b) {
            int t = a.v;
            a.v = b.v;
            b.v = t;
        }
    }
    
    class Valore {
        public int v;
    
        public Valore(int v) { this.v = v; }
    }
    La cosa da notare è che non vengono scambiati i valori dei due reference v1 e v2 (perché con il passaggio per valore il metodo chiamato riceve una copia dei valori degli argomenti) ma viene scambiato lo "stato" interno degli oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Era la conferma che cercavo, grazie.
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.