Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] Aiuto valorizzazione variabile

    Ciao a tutti.

    Quando eseguo un codice di questo tipo mi restituisce un risultato diverso da quello che voglio.
    Valorizzo la Var2 con il valore di var1, modifico var1 e gli restituisco il valore che aveva prima del metodo che lo modifica.

    codice:
    var2=var1;
    metodoModificaVar1;
    var1=var2;
    Teoricamente mi dovrebbe restituire il valore originale di var1 o sbaglio? Perchè quello che ottengo è che var2 passa a var1 il valore modificato di var1. (var2 è una variabile definita solo nel metodo in cui si trova e non anche in metodoModificaVar1).

    Grazie

  2. #2
    nessuna idea?

  3. #3
    Teoricamente mi dovrebbe restituire il valore originale di var1 o sbaglio?
    Questo è vero solo se si tratta di variabili di tipi primitivi (int, double, ecc...)

    Se invece si tratta di oggetti, var2 assumerà semplicemente il valore (cioè
    l’indirizzo) di var1. Ciò significa che var2 "punterà" allo stesso oggetto cui punta var1. Se modifichi l'oggetto puntato da var1 anche var2 cambierà (dato che puntano alla stessa locazione di memoria)
    Al mio segnale... scatenate l'inferno!

  4. #4
    Utente bannato
    Registrato dal
    Jul 2005
    Messaggi
    49
    Originariamente inviato da R@ve M@ster
    Questo è vero solo se si tratta di variabili di tipi primitivi (int, double, ecc...)

    Se invece si tratta di oggetti, var2 assumerà semplicemente il valore (cioè
    l’indirizzo) di var1. Ciò significa che var2 "punterà" allo stesso oggetto cui punta var1. Se modifichi l'oggetto puntato da var1 anche var2 cambierà (dato che puntano alla stessa locazione di memoria)
    è vero...
    il prof ci disse la stessa cosa, però, per qualche strano motivo, questo non (credo) accade per gli oggetti di tipo string...cioè...teoricamente vale quelo che dici tu, ma java sembra che lo tratti come se fosse un tipo primitivo...

    cioè...tutti gli oggetti passati come parametro di un metodo vengono passati per riferimento...ma questo non accadeva con i tipi string e il prof fece una figuraccia quel giorno
    Es.:

    codice:
    public class test
    {
      public static void main(String [] args)
      {
        String a = "ciao";
        System.out.println(a);
        Edit(a);
        System.out.println(a);
      }
      
      public static void Edit(String b)
      {
        b=new String("h");
      }
    }
    dovrebbe stampare
    ciao
    h

    invece no...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TuTToWeB
    dovrebbe stampare
    ciao
    h

    invece no...
    E certo che no
    Il reference alla nuova stringa "h" lo assegni alla variabile locale 'b' (il parametro) che è una copia della variabile 'a' nel main e che pertanto non viene minimanente toccata!

    Passando ad un metodo il reference ad un oggetto potresti eventualmente alterare lo stato dell'oggetto (se fosse mutabile .... non è il caso di String perché è immutabile).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    sono 2 variabili di tipo char...è un tipo primitivo se non ricordo male no?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Paul16
    sono 2 variabili di tipo char...è un tipo primitivo se non ricordo male no?
    Sì.
    Posta il codice completo, che vediamo dov'è l'inghippo.
    E scrivi anche un esempio che hai provato, descrivendo quello che intendevi ottenere e quello che, invece, ottieni dall'esecuzione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    ho risolto il problema, era una stupidata..

    praticamente le due variabili si chiamavano lancio e lancia e invece di scrivere lancia ho scritto lancio senza accorgermene... facevo una cosa di questo tipo:

    codice:
    var2=var1;
    metodoModificaVar1;
    var1=var1;


    Grazie a tutti cmq

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.