Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
La seconda generazione della citycar elettrica di Dacia passa alla piattaforma RGEV small di Renault Group, cresce di 15 cm in lunghezza e 18 cm in larghezza, adotta un motore da 80 CV e una batteria LFP da 27,5 kWh per 250 km WLTP. Prezzi da 17.900 euro, produzione a Novo Mesto in Slovenia.
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-12-2008, 11:59   #1
soeca
Member
 
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
[Java] Reference "this"

ragazzi ho un problemino! sto imparando(piano piano)a programmare in java e non capisco una cosa: come si usa il reference this?ho letto che serve per referenziare ogni variabile d'istanza che non è esplicitamente referenziata!!e se ci sono più variabili d'istanza non referenziate?come si applica il this????grazie a tutti!!!!
soeca è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 12:45   #2
wizard1993
Senior Member
 
L'Avatar di wizard1993
 
Iscritto dal: Apr 2006
Messaggi: 22462
this è passato implicitamente ad ogni funzione ed è un riferimento all'oggetto stesso, serve per accedere alle variabili ed ai metodi tramite il riferimento oggetto.metodo, al di la dei fatti stilistici (c'è a chi piace a chi no) il riferimento this è utile in queste situazioni
Codice:
class prova{
int x,y;
public prova(int x,int y){
this.x=x;
this.y=y;
}
}
in questo caso se non si usasse this, il compilatore riconoscerebbe l'istruzione come autoassegnamento poichè lo scope della variabile passata come paramentro è maggiore di quello delle variabili membro
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza
wizard1993 è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 12:55   #3
soeca
Member
 
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
aspetta fammi capire bene!!!allora abbiamo questo codice:
class prova{
int x,y;
public prova(int x,int y){
this.x=x;
this.y=y;
}
}
la parte this.x vuol dire che il this si sta riferendo alla variabile d'istanza(int x,y) o al parametro formale del metodo?
soeca è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 12:59   #4
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
this.x si riferisce alla variabile d'istanza "corrente", x è il parametro formale
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 13:09   #5
soeca
Member
 
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
ah ok....quindi in questo caso si assegna alla variabile d'istanza il valore del parametro formale!!!mentre se non fosse stato messo il this ci sarebbe stato un autoassegnamento come ha detto wizard1993 perchè

x = x
^ ^
| |
| |
(qui si sta riferendo al (qui assegna il valore
parametro formale) del parametro formale)

e quindi x=x sarebbe inutile scriverlo perchè assegnerebbe un valore a se stesso!!giusto??
soeca è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 13:13   #6
soeca
Member
 
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
ragazzi lasciate stare il disegno......avevo provato a disegnare una freccia sotto la prima x e dire che li si riferiva al parametro formale!stessa cosa ho fatto con la seconda x a destra dell'uguale e avevo scritto che li assegnava il valore del parametro formale!!!ma il testo non viene formattato come avrei voluto!!! sorry!!
soeca è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 16:29   #7
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da wizard1993
Codice:
class prova{
int x,y;
public prova(int x,int y){
this.x=x;
this.y=y;
}
}
in questo caso se non si usasse this, il compilatore riconoscerebbe l'istruzione come autoassegnamento poichè lo scope della variabile passata come paramentro è maggiore di quello delle variabili membro
Non sono d'accordo, semmai succede il contrario. L'istruzione riconosciuta dal compilatore è senza ombra di dubbio di autoassegnamento, ma lo scope della variabile d'istanza è in questo caso più ampio del parametro esplicito.

Infatti codice del tipo:
Codice:
public class prova{
	int x,y;
	
	public prova(int x,int y){
		x=x;
		y=y;
	}

	public static void main(String[] args) {
		prova p = new prova(4, 5);
		System.out.println("p.x=" + p.x);
		System.out.println("p.y=" + p.y);
	}
}
produce quest'output:
Quote:
p.x=0
p.y=0
e non
Quote:
p.x=4
p.y=5
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 17:00   #8
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da Oceans11 Guarda i messaggi
Non sono d'accordo, semmai succede il contrario. L'istruzione riconosciuta dal compilatore è senza ombra di dubbio di autoassegnamento, ma lo scope della variabile d'istanza è in questo caso più ampio del parametro esplicito.

Infatti codice del tipo:
Codice:
public class prova{
	int x,y;
	
	public prova(int x,int y){
		x=x;
		y=y;
	}

	public static void main(String[] args) {
		prova p = new prova(4, 5);
		System.out.println("p.x=" + p.x);
		System.out.println("p.y=" + p.y);
	}
}
produce quest'output:
e non
Su "Sun Certified Java Programmer" di Sierra e Bates sta scritto che. riguardo all'uso del this, i parametri formali "nascondono" le variabili d'istanza.

Inoltre, x=x, secondo quello che dici tu, sarebbe uguale a this.x = this.x
Sarebbe generato un errore perché usi una variabile (d'istanza) non ancora inizializzata, indipendentemente dal fatto che sia un'autoassegnamento.
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 17:15   #9
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da malocchio
Su "Sun Certified Java Programmer" di Sierra e Bates sta scritto che. riguardo all'uso del this, i parametri formali "nascondono" le variabili d'istanza.
Non lo conosco, ma facendo un pò come San Tommaso e provando con le mie mani, ho ottenuto quell'output, non mi sembra che ci siano dubbi.

Quote:
Originariamente inviato da malocchio
Inoltre, x=x, secondo quello che dici tu, sarebbe uguale a this.x = this.x
Sarebbe generato un errore perché usi una variabile (d'istanza) non ancora inizializzata, indipendentemente dal fatto che sia un'autoassegnamento.
Sì infatti! x=x in realtà viene letto this.x = this.x.
E non è vero che la variabile d'istanza non è ancora inizializzata, perchè dove non lo è esplicitamente, il compilatore la inizializza a valori di default (0 per numeri, false per i boolean e null per gli oggetti).
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 17:55   #10
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da Oceans11 Guarda i messaggi
Non lo conosco, ma facendo un pò come San Tommaso e provando con le mie mani, ho ottenuto quell'output, non mi sembra che ci siano dubbi.



Sì infatti! x=x in realtà viene letto this.x = this.x.
E non è vero che la variabile d'istanza non è ancora inizializzata, perchè dove non lo è esplicitamente, il compilatore la inizializza a valori di default (0 per numeri, false per i boolean e null per gli oggetti).
Abbiamo ragione metà per uno!

Se io al posto di fare autoassegnamenti scrivo nel costruttore
Codice:
x = 2;
y = 3;
l'output è sempre uguale.

Codice:
class Prova {
    public int x;
    public int y;
    public Prova (int x, int y) {
        x = 2;
        y = 4;
    }
    public static void main(String[] args) {
        Prova p = new Prova(2,8);
        System.out.println("p.x = "+p.x);
        System.out.println("p.y = "+p.y);
        System.exit(0);
    }
}
L'output è:
Codice:
p.x = 0
p.y = 0
Significa che nel costruttore le due variabili x e y nascondono quelle d'istanza, quindi non è vero che "x = x" è equivalente a "this.x = this.x" !!!

Però le variabili d'istanza vengono inizializzate dal compilatore a zero di default (non lo sapevo, io inizializzo sempre tutto nel costruttore).

Le variabili d'istanza non vengono neanche toccate nel costruttore.

Questo
Quote:
Sarebbe generato un errore perché usi una variabile (d'istanza) non ancora inizializzata, indipendentemente dal fatto che sia un'autoassegnamento.
non è vero perché le var d'istanza sono inizializzate nel momento dell'allocazione della memoria, e quindi se nel costruttore faccio System.out.print(this.x), questo stampa 0. Mea culpa
__________________

Ultima modifica di malocchio : 07-12-2008 alle 18:00.
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 18:22   #11
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da malocchio
Abbiamo ragione metà per uno!

Se io al posto di fare autoassegnamenti scrivo nel costruttore
Codice:
x = 2;
y = 3;
l'output è sempre uguale.

Codice:
class Prova {
    public int x;
    public int y;
    public Prova (int x, int y) {
        x = 2;
        y = 4;
    }
    public static void main(String[] args) {
        Prova p = new Prova(2,8);
        System.out.println("p.x = "+p.x);
        System.out.println("p.y = "+p.y);
        System.exit(0);
    }
}
L'output è:
Codice:
p.x = 0
p.y = 0
Significa che nel costruttore le due variabili x e y nascondono quelle d'istanza, quindi non è vero che "x = x" è equivalente a "this.x = this.x"!!!
azz! beh ho ricontrollato e hai ragione tu stavolta, 50:50!
Pure mea culpa! Speriamo di non aver confuso troppo le idee a chi chiedeva chiarimenti!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa Nuova Dacia Spring, del modello precedente resta...
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
La CNSA annuncia la missione Tianwen-4 v...
Una valanga di wafer e memorie incombe s...
Microsoft 365, miglioramenti dopo il dow...
Un'IA attacca la tua azienda, ma per dif...
TSMC investe 1 miliardo di dollari in Op...
Niente più risposte IA nelle ricerche: M...
Allarmi bomba nelle scuole, il Viminale:...
OpenAI incassa 10 miliardi in tre mesi, ...
Continua il Black Friday Engwe: sconto e...
OnePlus 12 riceve Android 17 con una set...
Troppe patch generate dall'IA: anche chi...
Comprata e spenta il giorno dopo: cos'er...
Google lancia Tabletop, l'IA che trasfor...
SpaceX e Tesla verso la fusione del seco...
One UI 9.5 arriva anche su Galaxy S25: S...
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: 18:32.


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