Newsgroup: it.comp.java
Titolo: passaggi per valore e per riferimento

Ok ho appena scoperto di non averci capito una mazza di come java lavora
(non che prima mi ritenessi un guru anzi). 
Ho letto che java (per questioni di performance) passa tutti i parametri
per riferimento. Ok mi son detto come puntatori C piu' o meno quindi se
la funzione me li modifica anche il valore di partenza viene modificato.
String s = "la mia stringa";
cambia(s);
public void cambia(String s){
        s = s + " modificata"
}
dopo l'uscita dal metodo "cambia" s e' ancora uguale a "la mia stringa".
Come posso fare a far modificare i paramtetri di un metodo ?
e con i vettori ?
Mi spiego meglio. Se ho un vector, ne estraggo un valore tramite il
solito metodo get e lo modifico, andro' a modificare anche l'oggetto
contenuto nel vector ?
Il caldo mi sta facendo male ...
Grazie a tutti
 
-- 
Ciao
Fabio

 ha scritto nel messaggio
news:1ghsw8m.o8cv9w1tdxz0cN%we...@despammed.com...

Il java passa i tipi primitivi come int char long etc etc per valore.
Tutto il resto,ovvero gli oggetti, vengono passatti per riferimento !

 Tutto il resto,ovvero gli oggetti, vengono passatti per riferimento !
Se fosse cosě , andresti con l'idea di Wizzy....String č un oggetto non un
tipo primitivo, o sbaglio?
Davide Denicolo
davide<at>securityinfos<dot>com
--
=======================
Ciň che l'occhio vede e l'orecchio
sente , la mente crede
=======================

 contenuto nel vector ?
No a meno che una volta modifica l'oggetto non lo riponi le vector
  public void cambia (Vector v){
    String s=(String)v.get(0);
    s=s+" Ciao";
    v.add(0,s);
  }
Ciao ReDiCuori
-- 
L'informatica è un arte
---------------------------------------------------------
 
www.pascallike.too.it
 
http://utenti.lycos.it/pascallike
 il sito sulla programmazione pascal
 sorgenti, tutorial ed utility
------------------------------------------------------------
www.treves-srl.com
Libreria Internazionale Treves
Via Toledo 249/250 Napoli
------------------------------------------------------------
www.alphalibri.com
Vendita ingrosso di libri
Via S.Anna dei Lombardi 10 , Napoli
---------------------------------------------------------

 ha scritto nel messaggio
news:MBQOc.22513$1V3.5...@twister2.libero.it...

Bhe allora a questo punto passi vettore e posizione per cambiarla no ?

 stringa".
Provo a rispondere evitando di dire cavolate.
Scrivere
    s = s + "modificata"
equivale a scrivere
    s = new String(s + "modificata")
cioè s = crea un nuovo oggetto. Creando un nuovo oggetto, la variabile s nel
metodo cambia punta al nuovo oggetto ma quella precedente punta sempre al
vecchio oggetto che tu non modifichi.
Quindi modificare un oggetto passato va benissimo ma in questo caso tu non
lo modifichi ma ne crei uno nuovo. Lavorando con altri oggetti non dovresti
avere problemi.
Non so se ti serve, ma il tuo esempio funzionerebbe bene così:
  String s = "prova";
  s = cambia(s);
 public static String cambia(String s){
  s = s + " modificata";
  return s;}
Sottolineo inoltre che in java tutti i parametri vengono passati per valore.
Quando viene passato un tipo base ne viene passato il valore. Se viene
passato un oggetto viene passato il valore del riferimento che è il
riferimento stesso.
Giuseppe

 
Il dubbio mi e' sorto perche' la cosa invece funziona anche senza
risettare il valore dentro l'array
MyObj obj = (MyObj)v.get(0);
obj.setValue("new Value");
MyObjc obj2 = (MyObj)v.get(0)
assertEquals(obj2.getValue(), obj.getValue());
ti restituira' true...
-- 
Ciao
Fabio

 Tutto il resto,ovvero gli oggetti, vengono passatti per riferimento !
Ok ma ho scoperto sulla mia pelle che tipi semplici (ma comunque
oggetti) tipo le stringhe sono passati per valore.
-- 
Ciao
Fabio

 Bhe allora a questo punto passi vettore e posizione per cambiarla no ?
Nel caso di una String sei costretto nonostante dovrebbe essere un
oggetto e quindi essere passato per riferimento ...
-- 
Ciao
Fabio

 ha scritto:

O è un tipo semplice O è un oggetto, non esistono vie di mezzo :)
Una stringa è un oggetto a tutti gli effetti e non è un tipo semplice.
I tipi semplici sono int, char, boolean, float ecc ecc...
Giuseppe

 
Grazie mille mi hai risolto un bel po' di dubbi
-- 
Ciao
Fabio

 wrote:

Eh eh ho letto solo dopo la tua spiegazione sull'operatore +
-- 
Ciao
Fabio

 Grazie a tutti
Spero di essere stato utile (e di non aver detto cavolate),
	Giorgio


Ecco risolto il problema della questione degli oggetti di tipo String:
http://www.cli.di.unipi.it/~acorradi/LIP-03/ClassiMetodi/Metodi/main.html#9
Saluti
Davide Emanuele Denicolo


       Giorgio
Lo sei stato grazie!
-- 
Ciao
Fabio

Stavo sfogliando le pagine di una "rivista specializzata" quando Wezzy mi ha
interrotto con la ridicola scusa:
Ne abbiamo parlato pochi thread fa. In Java esistono solo passaggi per
valore. Evitiamo di parlarne un giorno si e uno no.
Vi passo pure questo link, preso dall'altro thread:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it/imsv/

 
Esattamente il nocciolo della questione
Grazie del link. Slide eloquenti.
-- 
Ciao
Fabio

In Java esiste solo il passaggio per valore. Nel caso di oggetti il valore
della variabile corrisponde al riferimento dell'oggetto. Per le String
avviene ancora ciò con la differenza che un oggetto String non può
essere modificato, quindi ad ogni modifica viene in realtà creato un
nuovo oggetto String, rendendo vano il passaggio del riferimento.
-- 
Pietro	- 
http://www.pietroweb.tk
Linux Registered User #304991
Powered by MDK Linux Kernel 2.6.3

 per riferimento. 
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=36A9F402.5D6B30DD%40tin.it