Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-01-2008, 12:33   #41
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
in java un oggetto non è passato per valore, ma per riferimento, o, più precisamente, per copia del valore di un riferimento che punta ad esso. Ma l'oggetto passatto non viene copiato

non confondere l'oggetto con il suo riferimento!
intendo dire che in java un'oggetto è una variabile che contiene il riferimento a un'area di memoria. questa variabile è passata per valore come tutte le altre variabili, non c'è un trattamento speciale per gli oggetti.
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 12:42   #42
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
intendo dire che in java un'oggetto è una variabile che contiene il riferimento a un'area di memoria. questa variabile è passata per valore come tutte le altre variabili, non c'è un trattamento speciale per gli oggetti.
il tuo errore è la confuzione dei termini reference e object.

quello che tu chiami variabile identifica il reference, non l'object

il reference è passato per valore e tale fatto implica che l'object identificato dal reference è passato per riferimento
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 12:44   #43
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
Codice:
#include <stdio.h>
#include <stdlib.h>

void foo(int* number)
{
  int* anotherNumber = (int*)malloc(sizeof(int));
  (*anotherNumber) = 4;
  number = anotherNumber;
}

int main(int argc, char* argv[])
{
  int* number = (int*)malloc(sizeof(int));
  (*number) = 1;
  foo(number);
  printf("\n%d\n", (*number));
  return EXIT_SUCCESS;
}
stesso comportamento di java
prova in java a fare lo stesso per favore
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 12:55   #44
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
il tuo errore è la confuzione dei termini reference e object.

quello che tu chiami variabile identifica il reference, non l'object

il reference è passato per valore e tale fatto implica che l'object identificato dal reference è passato per riferimento
no non c'è nessun passaggio per riferimento, altrimenti l'esempio sotto darebbe come risultato 4.
un oggetto è una variabile che contiene un reference, ma non per questo possiamo dire che esiste il passaggio per riferimento in java. è proprio lo stesso discorso del C, ne più ne meno
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
prova in java a fare lo stesso per favore
certamente:
Codice:
public class Prova {

	public static void main(String[] args) {
		Integer number = new Integer(1);
		foo(number);
		System.out.println(number.toString());
	}
	
	public static void foo(Integer number) {
		Integer anotherNumber = new Integer(4);
		number = anotherNumber;
	}

}
il risultato è identico alla versione C
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:00   #45
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
no non c'è nessun passaggio per riferimento, altrimenti l'esempio sotto darebbe come risultato 4.
un oggetto è una variabile che contiene un reference, ma non per questo possiamo dire che esiste il passaggio per riferimento in java. è proprio lo stesso discorso del C, ne più ne meno

certamente:
Codice:
public class Prova {

	public static void main(String[] args) {
		Integer number = new Integer(1);
		foo(number);
		System.out.println(number.toString());
	}
	
	public static void foo(Integer number) {
		Integer anotherNumber = new Integer(4);
		number = anotherNumber;
	}

}
il risultato è identico alla versione C
spiacente, ma non hai dimostrato nulla: semplicemente number è la copia del riferimento all'oggetto integer. modificando il valore di number semplicemente lo associ a un nuovo oggetto.

guarda:
Codice:
public class Test1 {

	public static void main(String[] args) {
		int i = 0;
		foo(i);
		System.out.println(i);
		
		Integer j = 0;
		foo(j);
		System.out.println(j);
		
		Bla b = new Bla();
		foo(b);
		System.out.println(b.value);
	}
	
	private static void foo(int i) {
		i = 4;
	}
	
	private static void foo(Integer i) {
		i = 4;
	}
	
	private static void foo(Bla b){
		b.value = 4;
	}
	
	static class Bla {
		int value;
	}
}
b è passato per riferimento, infatti lo modifico
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:01   #46
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
Codice:
#include <stdio.h>
#include <stdlib.h>

void foo(int* number)
{
  int* anotherNumber = (int*)malloc(sizeof(int));
  (*anotherNumber) = 4;
  number = anotherNumber;
}

int main(int argc, char* argv[])
{
  int* number = (int*)malloc(sizeof(int));
  (*number) = 1;
  foo(number);
  printf("\n%d\n", (*number));
  return EXIT_SUCCESS;
}
scusa, mi potresti dire qual è il risultato di questo? non mi ricordo nulla di C
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:04   #47
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
il tuo errore è la confuzione dei termini reference e object.

quello che tu chiami variabile identifica il reference, non l'object

il reference è passato per valore e tale fatto implica che l'object identificato dal reference è passato per riferimento
..mi sa che l'errore è il tuo dato che konte ha perfettamente ragione.
Come spiega in maniera molto approfondita il link che avevo postato, in java esiste solo ed esclusivamente il passaggio per valore.
Infatti in java esistono essenzialmente i primitive type e i reference type.
I primitive type sono tutti i tipi primitivi, mentre i reference type comprendono i vari oggetti e arrays.
Quando tu passi un parametro ad un metodo esso non fa altro che ricevere per copia il contenuto della variabile che gli stai passando.
Poichè i primitive type contengono al loro interno semplicemente un valore, all'interno della funzione vedrai direttamente questo valore.
Poichè i reference type contengono al loro interno un riferimento (come dice il nome stesso d'altronde), allora in quel caso viene passato per copia il valore del reference type, che non è altro che il riferimento dell'oggetto.
Ovviamente tale passaggio NON è assolutamente un passaggio per riferimento dato che non puoi in alcun modo modificare il riferimento iniziale, ma puoi semplicemente agire sulla copia di tale riferimento.
Tanto per concludere, è inutile continuare a dibattere dato che Gosling stesso aveva ben chiarito questo concetto nelle specifiche del linguaggio Java, come evidenziato lungo il corso del thread che ho linkato.
Se volete continuare a credere che in java esista il passaggio per riferimento, allora fate pure.
Però state sbagliando dato che non è una questione di opinioni personali, ma di definizioni che sono state date in un certo modo all'atto della creazione del linguaggio Java e contenute nelle sue specifiche.
__________________

Ultima modifica di ^TiGeRShArK^ : 18-01-2008 alle 13:09.
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:08   #48
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
..mi sa che l'errore è il tuo dato che konte ha perfettamente ragione.
Come spiega in maniera molto approfondita il link che avevo postato, in java esiste solo ed esclusivamente il passaggio per valore.
Infatti in java esistono essenzialmente i primitive type e i reference type.
I primitive type sono tutti i tipi primitivi, mentre i reference type comprendono i vari oggetti e arrays.
Quando tu passi un parametro ad un metodo esso non fa altro che ricevere per copia il contenuto della variabile che gli stai passando.
Poichè i primitive type contengono al loro interno semplicemente un valore, all'interno della funzione vedrai direttamente questo valore.
Poichè i reference type contengono al loro interno un riferimento (come dice il nome stesso d'altronde), allora in quel caso viene passato per copia il valore del reference type, che non è altro che il riferimento dell'oggetto.
Ovviamente tale passaggio NON è assolutamente un passaggio per riferimento dato che non puoi in alcun modo modificare il riferimento iniziale, ma puoi semplicemente agire sulla copia di tale riferimento.
Tanto per concludere, è inutile continuare a dibattere dato che Gosling stesso aveva ben chiarito questo concetto nelle specifiche del linguaggio Java, come evidenziato lungo il corso del thread che ho linkato.
Se volete continuare a credere che in java esista il passaggio per riferimento, allora fate pure.
Però state sbagliando dato che non è una questione di opinioni personali, ma di definizioni che sono state date in un certo modo all'atto della creazione del linguaggio Java e contenute nelle sue specifiche.
io ho affermato che il passaggio di un oggetto (concettualmente, visto che il passaggio coinvolge il reference, non l'oggetto) è per riferimento e non per copia... non mi pare di aver detto vaccate

per dirla in altro modo, sullo stack non viene posta una copia dell'oggetto, ma una copia del reference che punta a d esso.

è giusto o sbaglio?
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:16   #49
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
spiacente, ma non hai dimostrato nulla: semplicemente number è la copia del riferimento all'oggetto integer. modificando il valore di number semplicemente lo associ a un nuovo oggetto.

guarda:
Codice:
public class Test1 {

	public static void main(String[] args) {
		int i = 0;
		foo(i);
		System.out.println(i);
		
		Integer j = 0;
		foo(j);
		System.out.println(j);
		
		Bla b = new Bla();
		foo(b);
		System.out.println(b.value);
	}
	
	private static void foo(int i) {
		i = 4;
	}
	
	private static void foo(Integer i) {
		i = 4;
	}
	
	private static void foo(Bla b){
		b.value = 4;
	}
	
	static class Bla {
		int value;
	}
}
b è passato per riferimento, infatti lo modifico
il fatto che lo puoi modificare non significa che ci sia stato un passaggio per riferimento. so bene che la differenza è sottile, ma una cosa è vera finchè non si dimostra il contrario e nella fattispecie il tuo esempio sembrerebbe assecondare l'ipotesi che in java c'è il passaggio per riferimento.. se non fosse che l'esempio che ho fatto prima dimostra il contrario.
ecco per essere più chiari faccio un esempio di passaggio per riferimento in C++
Codice:
#include <stdio.h>
#include <stdlib.h>

void foo(int &number)
{
  int anotherNumber = 4;
  number = anotherNumber;
}

int main(int argc, char* argv[])
{
  int number =  1;
  foo(number);
  printf("\n%d\n", number);
  return EXIT_SUCCESS;
}
scusate se lo stile è C-like ma ho adattato l'esempio scritto in C.
ora guardando in giro per internet, pare che il tipo di passaggio dei parametri usato da java per gli oggetti e da C per i puntatori si chiami per indirizzo. ma in realtà non è altro che un passaggio per valore (con il valore che è un indirizzo)
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:17   #50
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
io ho affermato che il passaggio di un oggetto (concettualmente, visto che il passaggio coinvolge il reference, non l'oggetto) è per riferimento e non per copia... non mi pare di aver detto vaccate

per dirla in altro modo, sullo stack non viene posta una copia dell'oggetto, ma una copia del reference che punta a d esso.

è giusto o sbaglio?
Sbagli.
Quote:
Does Java pass objects by reference or by value?

The answer is NO! The fact is that Java has no facility whatsoever to pass an object to any function! The reason is that Java has no variables that contain objects.
per approfondire, visto che mi pare che avete confusione proprio nelle definizioni di base ecco due link che dovrebbero spiegare il concetto meglio di quanto riuscirei a fare io:

http://www.javaworld.com/javaworld/j...0526-pass.html
http://www.yoda.arachsys.com/java/passing.html
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:18   #51
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
scusa, mi potresti dire qual è il risultato di questo? non mi ricordo nulla di C
il risultato è: 1
lo stesso risultato si ottiene anche per l'esempio che ho postato in java, mentre l'esempio che ho appena postato in C++ restituisce 4
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 13:23   #52
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
Sbagli.

per approfondire, visto che mi pare che avete confusione proprio nelle definizioni di base ecco due link che dovrebbero spiegare il concetto meglio di quanto riuscirei a fare io:

http://www.javaworld.com/javaworld/j...0526-pass.html
http://www.yoda.arachsys.com/java/passing.html
perdonami, ma cosa, della frase "io ho affermato che il passaggio di un oggetto (concettualmente, visto che il passaggio coinvolge il reference, non l'oggetto) è per riferimento e non per copia..." fa intendere che venga passato l'oggetto e non il reference?

ho usato la parola "concettualmente" apposta...

e cmq non vedo perché ti debba scaldare
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2008, 22:12   #53
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
Sbagli.

per approfondire, visto che mi pare che avete confusione proprio nelle definizioni di base ecco due link che dovrebbero spiegare il concetto meglio di quanto riuscirei a fare io:

http://www.javaworld.com/javaworld/j...0526-pass.html
http://www.yoda.arachsys.com/java/passing.html
Mmmm... bene, quindi mi sembra di aver capito bene (e il mio esempio era corretto, perciò).

Una curiosità (sì, lo so, basterebbe leggersi le specifiche del C++ ma... forse voi mi potete dare la risposta più velocemente): nemmeno in C++ credo che esista la variabile in grado di contenere un'oggetto... semplicemente, immagino che il passaggio per riferimento sia implementato come un passaggio doppiamente inderetto, cioè, mentre in Java ciò che viene passato è il riferimento ad un oggetto copiandone il valore nello stack della funzione chiamata (e ogni operazione su di esso, meno l'assegnamento, viene fatta dereferenziandolo, cioè in Java non esiste un'aritmetica dei puntatori), in C++ è possibile passare il riferimento al riferimento, cioè un puntatore all'area di memoria contenente il puntatore all'oggetto... in sostanza, l'indirizzo di (&) una variabile che è già un puntatore.
Ho indovinato?
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 18:02   #54
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Dovrei scrivere un romanzo, ma vedo che mad_hhatter ha già scritto tutto
quello che avevo in mente, e si è pure beccato vari insulti al mio posto, quindi grazie

Visto che parlate di specifiche, gosling e sua nonna in carriola,
magari postate dei link risolutivi, non i soliti swap non funzionanti,
che dimostrano solo che i riferimenti sono passati per valore
(grazie, già lo sapevo!)

Come detto molto prima, se per voi oggetto = riferimento allora avete ragione,
per me l'oggetto è quello a cui il riferimento punta.

Oppure diciamo che in java gli oggetti non esistono, è una posizione accettabile,
ma allora tutto il modello di astrazione di java non ha più senso.

A presto.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 18:54   #55
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Dovrei scrivere un romanzo, ma vedo che mad_hhatter ha già scritto tutto
quello che avevo in mente, e si è pure beccato vari insulti al mio posto, quindi grazie

Visto che parlate di specifiche, gosling e sua nonna in carriola,
magari postate dei link risolutivi, non i soliti swap non funzionanti,
che dimostrano solo che i riferimenti sono passati per valore
(grazie, già lo sapevo!)

Come detto molto prima, se per voi oggetto = riferimento allora avete ragione,
per me l'oggetto è quello a cui il riferimento punta.

Oppure diciamo che in java gli oggetti non esistono, è una posizione accettabile,
ma allora tutto il modello di astrazione di java non ha più senso.

A presto.
pensavo che l'esempio in C++ di passaggio di parametri per riferimento avesse chiarito ogni dubbio.. spero che noti una differenza sostanziale rispetto all'esempio java e se è così è evidente che non è possibile chiamarli con lo stesso nome

ps. ti potrà sembrare una sottigliezza, ma non comprendere a fondo il meccanismo di passaggio dei parametri è fonte di innumerevoli errori

pps. se sapevi che i riferimenti sono passati per valore allora sapevi anche che gli oggetti non sono passati per riferimento

Ultima modifica di k0nt3 : 19-01-2008 alle 19:20.
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 20:40   #56
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Dovrei scrivere un romanzo, ma vedo che mad_hhatter ha già scritto tutto
quello che avevo in mente, e si è pure beccato vari insulti al mio posto, quindi grazie

Visto che parlate di specifiche, gosling e sua nonna in carriola,
magari postate dei link risolutivi, non i soliti swap non funzionanti,
che dimostrano solo che i riferimenti sono passati per valore
(grazie, già lo sapevo!)

Come detto molto prima, se per voi oggetto = riferimento allora avete ragione,
per me l'oggetto è quello a cui il riferimento punta.

Oppure diciamo che in java gli oggetti non esistono, è una posizione accettabile,
ma allora tutto il modello di astrazione di java non ha più senso.

A presto.
guarda..
per me puoi tenerti tutte le convinzioni che vuoi..
Ma come ho scritto prima in java esistono solo due tipi:
i primitive type e i reference type.
Ovviamente gli oggetti appartengono ai reference type dato che come ho riportato e come è spiegato molto chiaramente nei link che ho riportato in java non esiste alcuna variabile che contiene un oggetto.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 21:24   #57
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
guarda..
per me puoi tenerti tutte le convinzioni che vuoi..
Ma come ho scritto prima in java esistono solo due tipi:
i primitive type e i reference type.
Ovviamente gli oggetti appartengono ai reference type dato che come ho riportato e come è spiegato molto chiaramente nei link che ho riportato in java non esiste alcuna variabile che contiene un oggetto.
allora, vediamo di riassumere quello che hai detto:
1) "oggetto" E' un reference type
2) "variabile" non contiene un oggetto

implica: "variabile" non contiene un sottoinsieme di tutti i reference type

domanda: come si usano i reference type che rappresentano oggetti se non sono nominabili tramite variabile?

ovviamente da qualche parte il tuo discorso non quadra.


Ora RIespongo il mio pensiero cercando di essere piu' formale e preciso di quanto sia stato in precedenza (visto che, rileggendomi, ho notato parecchie imprecisioni).
Un reference type e' una variabile che contiene un riferimento, un link, un puntatore a un'entita' residente nello heap e che costituisce un oggetto, cioe' un'istanza di una classe. ATTENZIONE: "oggetto" e' diverso da "reference"!

Ora, i parametri di un metodo possono essere reference type o primitive type, concentramoci sui reference type... concordiamo tutti sul fatto che un parametro in java e' passato solo per valore.
MA, poiche' un reference type ha senso solo in quanto rappresentante dell'oggetto a cui esso fa riferimento, e' comune identificare (SOLO A LIVELLO CONCETTUALE, per semplicita' di ragionamento) il reference con l'oggetto.

In questo senso diciamo (consci di commettere un abuso di notazione, e sempre parlando a livello di rappresentazione concettuale e a puro scopo semplificativo) che il fatto di passare per valore un reference EQUIVALE (nel senso che "e' come se... anche se tecnicamente non succede per davvero") a passare per riferimento l'oggetto a cui punta il reference passato.

Ora, siccome il secondo dei link che hai postato per ultimi dice a un certo punto che in C (dove abbiamo appuranto che esiste solo il passaggio per valore) e' possibile simulare il passaggio per riferimento usando i puntatori (ma di fatto sto passando per valore il puntatore di qualcosa), non vedo perche' io debba essere accusato di dire stronzate quando dico che in java passare per valore il riferimento a un oggetto equivale concettualmente a passare l'oggetto per riferimento (sto persino usando gli stessi termini ).

Piu' terra terra: un oggetto e' passato per riferimento perche' l'unica cosa che mi permette di operare su e con un oggetto e' il suo riferimento.

Se non e' chiaro, la parola importante del mio discorso e' quel "concettualmente".

Ultima modifica di mad_hhatter : 19-01-2008 alle 21:29.
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 21:37   #58
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
In questo senso diciamo (consci di commettere un abuso di notazione, e sempre parlando a livello di rappresentazione concettuale e a puro scopo semplificativo) che il fatto di passare per valore un reference EQUIVALE (nel senso che "e' come se... anche se tecnicamente non succede per davvero") a passare per riferimento l'oggetto a cui punta il reference passato.
il problema è proprio qui! passare per valore il riferimento non equivale affatto a passare per riferimento l'oggetto, altrimenti come chiameresti il passaggio di parametri dell'esempio che ho postato in C++?
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 21:42   #59
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
pensavo che l'esempio in C++ di passaggio di parametri per riferimento avesse chiarito ogni dubbio.. spero che noti una differenza sostanziale rispetto all'esempio java e se è così è evidente che non è possibile chiamarli con lo stesso nome

ps. ti potrà sembrare una sottigliezza, ma non comprendere a fondo il meccanismo di passaggio dei parametri è fonte di innumerevoli errori

pps. se sapevi che i riferimenti sono passati per valore allora sapevi anche che gli oggetti non sono passati per riferimento
nell'esempio in C++ le cose vanno diversamente perche' la semantica dell'operatore di assegnamento e' diversa da java.

Nella versione java stai dicendo:
"prendi il rimerimento number e fallo puntare a questo nuovo oggetto". ovviamente number e' una copia e il riferimento originario (quello del chiamante) non viene toccato.

In C++:
ti fai dare l'indirizzo di un'entita' e poi dici: all'entita' presente a quell'indirizzo fai assumere questo valore

il che mi sembra assomigliare molto a quello che, in java, si fa partendo dal riferimento a un oggetto che contiene un dato membro e si cambia il valore di quest'ultimo.

nota che ho detto assomigliare, non "essere esattamente la stessa cosa"
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2008, 21:50   #60
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
il problema è proprio qui! passare per valore il riferimento non equivale affatto a passare per riferimento l'oggetto, altrimenti come chiameresti il passaggio di parametri dell'esempio che ho postato in C++?
e tu come lo chiami, in java, il "passaggio di un oggetto" (lo so, non viene passato l'oggetto, ma passami l'abuso di linguaggio)? lo chiami "per valore"?

certo, in C++ sovrascrivi l'oggetto (o almeno questo e' quello che deduco dal tuo esempio), in java non puoi, ok. pero' in java, limitatamente agli oggetti, posso modificarne i membri emulando una sovrascrittura.

di sicuro in java un oggetto non e' passato per valore, quindi io lo chiamo, per semplicita', passaggio per riferimento. sempre concettualemte e consapevole dell'imprecisione.
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
La capsula SpaceX Dragon CRS-33 ha acces...
La NASA è sempre più vicin...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:01.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v