Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-01-2009, 00:12   #1
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
[JAVA] Domanda sul cast

Vorrei sapere come mai questo codice funziona:
Codice:
public class CodaArray<T> implements Coda<T> {
	T[] elementi;
	int testa, lunghezza;
	public CodaArray(int n) {
		elementi = (T[]) new Object[n];
		testa = 0;
		lunghezza = 0;
	}
	public boolean èVuota() {
		return lunghezza == 0;
	}
	public void accoda(T element){
		if(lunghezza<elementi.length){
			elementi[(testa+lunghezza)%elementi.length]=element;
			lunghezza++;
		}
	}
	public T primo(){
		if(lunghezza==0) return null;
		return elementi[testa];
	}
	public T estraiPrimo(){
		if(lunghezza==0) return null;
		T el=elementi[testa];
		testa++;
		if(testa==elementi.length)
			testa=0;
		lunghezza--;
		return el;
	}

	public static void main(String[] args){

		Coda<Integer> q=new CodaArray<Integer>(10);
		q.accoda(2);
		q.accoda(12);
		System.out.println(q.estraiPrimo()+" "+q.estraiPrimo());
		
	}

}
In particolare non capisco come può funzionare la linea che ho evidenziato in rosso. D'altra parte questo non funziona:
Codice:
public class Prova{
	public static void main(String[] args){
		String[] a=(String[])new Object[10];
	}
}
Qualcuno me lo può spiegare?
E magari tanto che ci siete mi spiegate anche quando viene visualizzato il seguente warning?
Codice:
warning: [unchecked] unchecked cast
Perché ad esempio nel cast evidenziato sopra me lo segnala, in altri no, cosa cambia tra quello e gli altri?
Grazie!
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 02:10   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Uppete!
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 18:25   #3
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
In particolare non capisco come può funzionare la linea che ho evidenziato in rosso.
be', secondo te che errore dovrebbe dare? io la trovo perfettamente regolare, un array di Object castato ad un array di T (comunque considera che T estende per forza Object poiché nei parametri del generic hai specificato un nome e non un punto interrogativo).



Quote:
D'altra parte questo non funziona:
Codice:
public class Prova{
	public static void main(String[] args){
		String[] a=(String[])new Object[10];
	}
}
uh? che errore da...?


Quote:
E magari tanto che ci siete mi spiegate anche quando viene visualizzato il seguente warning?
Codice:
warning: [unchecked] unchecked cast
questo a me lo da' quando cerco di castare verso un generic non parametrizzato, ad esempio ArrayList (non ArrayList<...>).
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 20:10   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Quote:
Originariamente inviato da fero86 Guarda i messaggi
be', secondo te che errore dovrebbe dare? io la trovo perfettamente regolare, un array di Object castato ad un array di T (comunque considera che T estende per forza Object poiché nei parametri del generic hai specificato un nome e non un punto interrogativo).
Innanzitutto grazie per la risposta.
Qui la cosa che non capisco è come è possibile fare il cast da un oggetto di tipo meno particolare ad uno più particolare. Io lo vedo (evidentemente sbaglio) come se facessi
Codice:
String s=(String)new Object();
E questo in esecuzione infatti dà errore "java.lang.ClassCastException"
Quote:
Originariamente inviato da fero86 Guarda i messaggi
uh? che errore da...?
Lo stesso: java.lang.ClassCastException
Quote:
Originariamente inviato da fero86 Guarda i messaggi
questo a me lo da' quando cerco di castare verso un generic non parametrizzato, ad esempio ArrayList (non ArrayList<...>).
E riguardo al fatto che me lo dà anche alla riga che ho evidenziato? Qual è il motivo?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 23:52   #5
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Innanzitutto grazie per la risposta.
Qui la cosa che non capisco è come è possibile fare il cast da un oggetto di tipo meno particolare ad uno più particolare.
e secondo te a che serve il cast allora?

il cast serve in casi come questi:
Codice:
Object actuallyAString = "hello, world";
String string = (String)actuallyAString;
mi sembra perfettamente regolare.



Quote:
Io lo vedo (evidentemente sbaglio) come se facessi
Codice:
String s=(String)new Object();
E questo in esecuzione infatti dà errore "java.lang.ClassCastException"
questo si, perché l'oggetto effettivamente castato non é String ma Object; ma nel caso dell'array non vedo il problema visto che gli elementi di un array Object[] possono tranquillamente essere tutti quanti di tipo T.



Quote:
Lo stesso: java.lang.ClassCastException
al momento, vista l'ora, non mi va di provare
peró io non capisco quale sia, nel tuo esempio, l'oggetto non castabile: non hai assegnato nessun elemento nell'array.



Quote:
E riguardo al fatto che me lo dà anche alla riga che ho evidenziato? Qual è il motivo?
probabilmente proprio per avvisarti che un array di Object puó potenzialmente contenere oggetti di tipo diverso da T, incluso Object; quindi castando ad array di T potresti avere delle ClassCastException per alcuni degli elementi. di fatto non cosa accada in una simile situazione, la ClassCastException l'ho ipotizzata; questo sarebbe un esperimento interessante da fare:
Codice:
class Generic<T>
{
	public Generic(T t)
	{
		Object[] objectArray = new Object[2];
		objectArray[0] = t;
		objectArray[1] = new Object();
		T[] array = (T[])objectArray;

		System.out.println(array[0].toString());
		System.out.println(array[1].toString());
	}
}

.
.
.

new Generic<String>("ciao");
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 00:25   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Quote:
Originariamente inviato da fero86 Guarda i messaggi
e secondo te a che serve il cast allora?
Forse mi sono spiegato male: non mi sono chiesto come è possibile fare un cast da un tipo meno particolare a uno più particolare, ma come è possibile fare un cast da un oggetto di tipo meno particolare a uno più particolare. L'oggetto in questo caso è un array di Object e si vuole fare un cast a qualcosa di più particolare, ossia un array di T.
Quote:
Originariamente inviato da fero86 Guarda i messaggi
il cast serve in casi come questi:
Codice:
Object actuallyAString = "hello, world";
String string = (String)actuallyAString;
mi sembra perfettamente regolare.
In questo caso l'oggetto è di tipo String e non stai facendo un cast a un tipo più particolare, lo stai castando a String.
Quote:
Originariamente inviato da fero86 Guarda i messaggi
questo si, perché l'oggetto effettivamente castato non é String ma Object; ma nel caso dell'array non vedo il problema visto che gli elementi di un array Object[] possono tranquillamente essere tutti quanti di tipo T.
E' vero ma non stai dicendo il contrario di quello che è scritto nel codice?
Nel codice sto assumendo che in un array T[] gli oggetti possono tranquillamente essere degli Object. O no?
Quote:
Originariamente inviato da fero86 Guarda i messaggi
al momento, vista l'ora, non mi va di provare
peró io non capisco quale sia, nel tuo esempio, l'oggetto non castabile: non hai assegnato nessun elemento nell'array.
Penso sia il nocciolo della questione. Non capisco perché quel codice non va mentre quello generico sì... Secondo me non dovrebbe funzionare nessuno dei due.
Quote:
Originariamente inviato da fero86 Guarda i messaggi
probabilmente proprio per avvisarti che un array di Object puó potenzialmente contenere oggetti di tipo diverso da T, incluso Object; quindi castando ad array di T potresti avere delle ClassCastException per alcuni degli elementi.
Ma esplicitando il cast io non dovrei sollevare il compilatore dall'onere di avvertirmi che sto facendo delle operazioni non sicure? Cioè, a sto punto tutti i cast non sono sicuri e dovrei ricevere un warning per ognuno di essi.. Cos'ha di speciale quel cast che un cast come questo:
Codice:
String s=(String)new Object();
non ha? (Oltretutto questo solleva l'eccezione a runtime, ovviamente)
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 10:58   #7
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
è tutto assolutamente normale.
Quando istanzi un array di object e poi lo casti a string[] al compile time non hai ovviamente alcun errore, ma al runtime, quando la VM tenta di utilizzare l'array di object come fosse un array di string ti va in eccezione perchè i due tipi sono diversi.
Col generic ti funziona invece perchè stai facendo il contrario, ovvero stai castando un qualsiasi oggeto (che per definizione estende da object) ad object, operazione perfettamente lecita.
Se fai la stessa cosa nel tuo codice fuori dalla classe generic ovviamente ti funziona dato che:
Codice:
Object[] o = (Object[])new String[10];
è un'operazione assolutamente legale.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 11:27   #8
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Forse mi sono spiegato male: non mi sono chiesto come è possibile fare un cast da un tipo meno particolare a uno più particolare, ma come è possibile fare un cast da un oggetto di tipo meno particolare a uno più particolare.
hai ragione, ieri sera non capivo niente, era tardi

comunque: convertire da un oggetto meno particolare ad uno piu particolare é possibile proprio grazie al cast esplicito (esempio: é possibile interpretare un riferimento di tipo Object come se fosse di tipo String se effettivamente esso si riferisce ad un oggetto String; altrimenti ClassCastException).

invece: convertire da un oggetto piu particolare ad uno meno particolare ovviamente é possibile in maniera del tutto naturale (esempio: un riferimento di tipo String puó essere assegnato ad uno di tipo Object con cast implicito).

chiarito questo andiamo avanti.



Quote:
L'oggetto in questo caso è un array di Object e si vuole fare un cast a qualcosa di più particolare, ossia un array di T.
un array di Object equivale a tanti riferimenti di tipo Object; questi riferimenti non é detto che contengano oggetti di tipo Object, potrebbero anche contenere oggetti di un qualunque tipo che eredita Object, come ad esempio T. ma potrebbero anche non farlo, da cui il warning. il warning ti dice che se tu casti tutti quei riferimenti di tipo Object a riferimenti di tipo T, a runtime qualcuno di quei riferimenti potrebbe causare una ClassCastException (non so di preciso in che momento) perché potrebbe di fatto contenere un Object anziché un T (per esempio).



Quote:
In questo caso l'oggetto è di tipo String e non stai facendo un cast a un tipo più particolare, lo stai castando a String.
l'oggetto si, ma il riferimento no: quello era di tipo Object, e la seconda istruzione dell'esempio non puó sapere che esso in realtá contiene un oggetto String piuttosto che un Object o qualcos'altro che erediti Object; semplicemente ci si fida del programmatore, il cast é forzato. se poi il riferimento non conteneva una String allora ClassCastException a runtime.



Quote:
Nel codice sto assumendo che in un array T[] gli oggetti possono tranquillamente essere degli Object. O no?
no: quello non é un array di T; viene solo visto come array di T ma di fatto é un array di Object, e come tale puó contenere tanto degli Object quanto dei T. non ho capito dove vuoi arrivare.



Quote:
Penso sia il nocciolo della questione. Non capisco perché quel codice non va mentre quello generico sì... Secondo me non dovrebbe funzionare nessuno dei due.
tigershark ha chiarito la questione; scusa se non me ne sono accorto ma ieri sera ero fuso



Quote:
Ma esplicitando il cast io non dovrei sollevare il compilatore dall'onere di avvertirmi che sto facendo delle operazioni non sicure? Cioè, a sto punto tutti i cast non sono sicuri e dovrei ricevere un warning per ognuno di essi..
vero, ma devi considerare che nel caso di un array c'é molta piu possibilitá di errore perché un riferimento é un riferimento solo, mentre un array sono N riferimenti
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 13:57   #9
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Inizio a capire ma c'è ancora qualcosa che non mi è chiaro... scusatemi.
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
è tutto assolutamente normale.
Quando istanzi un array di object e poi lo casti a string[] al compile time non hai ovviamente alcun errore, ma al runtime, quando la VM tenta di utilizzare l'array di object come fosse un array di string ti va in eccezione perchè i due tipi sono diversi.
Col generic ti funziona invece perchè stai facendo il contrario, ovvero stai castando un qualsiasi oggeto (che per definizione estende da object) ad object, operazione perfettamente lecita.
Se fai la stessa cosa nel tuo codice fuori dalla classe generic ovviamente ti funziona dato che:
Codice:
Object[] o = (Object[])new String[10];
è un'operazione assolutamente legale.
Ma nel generic non mi sembra che sto facendo questo, sto facendo:
Codice:
elementi = (T[]) new Object[n];
Cioè un cast da array di Object a T[].

Quote:
Originariamente inviato da fero86 Guarda i messaggi
un array di Object equivale a tanti riferimenti di tipo Object; questi riferimenti non é detto che contengano oggetti di tipo Object, potrebbero anche contenere oggetti di un qualunque tipo che eredita Object, come ad esempio T. ma potrebbero anche non farlo, da cui il warning. il warning ti dice che se tu casti tutti quei riferimenti di tipo Object a riferimenti di tipo T, a runtime qualcuno di quei riferimenti potrebbe causare una ClassCastException (non so di preciso in che momento) perché potrebbe di fatto contenere un Object anziché un T (per esempio).
Questo mi sembra molto ragionevole ma allora dovrebbe funzionare anche il cast
Codice:
String[] a=(String[])new Object[10];
perché al momento del cast l'array non contiene ancora nulla

Quote:
Originariamente inviato da fero86 Guarda i messaggi
no: quello non é un array di T; viene solo visto come array di T ma di fatto é un array di Object, e come tale puó contenere tanto degli Object quanto dei T. non ho capito dove vuoi arrivare.
Questo ora mi è chiaro, grazie.

Quote:
Originariamente inviato da fero86 Guarda i messaggi
vero, ma devi considerare che nel caso di un array c'é molta piu possibilitá di errore perché un riferimento é un riferimento solo, mentre un array sono N riferimenti
Anche questo mi sembra ragionevole. Grazie.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 16:49   #10
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
vero, ho letto male
cmq nel generic te lo fa fare perchè a quel livello non sa di che tipo è T.
Potrebbe benissimo essere un Object, e in quel caso è perfettamente legale.
Se però usi come tipo String allora al runtime ti darà un errore.
Ergo, usare dei cast espliciti in quel modo all'interno di una classe generic è altamente sconsigliato dato che rompi la type safety al compile time, non per niente ti viene comunicato un warning
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 16:53   #11
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Eppure a runtime funziona con il main che ho scritto, cioè dove uso Integer (se avessi usato String sarebbe stato lo stesso). Ti passo anche l'interfaccia così puoi provare.
Codice:
public interface Coda<T> {
	public boolean èVuota();
	public void accoda(T element);
	public T primo();
	public T estraiPrimo();
}
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 17:26   #12
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
allega tutto il progetto così gli do un occhiata
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 17:29   #13
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Praticamente sono solo i due file che ho postato, l'interfaccia e l'implementazione. Ti ho allegato anche i file class, nel caso non avessi il compilatore sotto mano. Grazie
Allegati
File Type: zip Coda.zip (1.9 KB, 1 visite)
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 17:36   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Una piccolezza:
Codice:
public interface Coda<T> {
	public boolean èVuota();
	public void accoda(T element);
	public T primo();
	public T estraiPrimo();
}
rinomina quel membro in: vuota.
Non usare mai lettere accentate nel codice sorgente, aggiungo neanche nei commenti.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 17:39   #15
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Che tipo di problemi comporta? Comunque in genere scrivo tutto in inglese ma questo è un esempio che ho preso dalle slide di un mio professore.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 17:40   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
...è un esempio che ho preso dalle slide di un mio professore.
Ah, benone
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 17:58   #17
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
ok provato.
Mi sa che il compilatore si accorge che in realtà gli viene passato un tipo integer e aggiorna automaticamente l'array trasformandolo da object ad integer evitando l'errore al run-time..
è l'unica spiegazione che mi viene in mente....
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 18:00   #18
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Che tipo di problemi comporta?
impone restrizioni sul charset con cui deve essere salvato il file: non tutti i charset supportano i caratteri accentati, cosi come altri caratteri. in generale sarebbe bene usare sempre e solo i caratteri del set ASCII non esteso: lettere minuscole e maiuscole, numeri, punteggiature, simboli comuni.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 18:19   #19
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
ok provato.
Mi sa che il compilatore si accorge che in realtà gli viene passato un tipo integer e aggiorna automaticamente l'array trasformandolo da object ad integer evitando l'errore al run-time..
è l'unica spiegazione che mi viene in mente....
Auto-boxing "esteso"
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 18:38   #20
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
ok provato.
Mi sa che il compilatore si accorge che in realtà gli viene passato un tipo integer e aggiorna automaticamente l'array trasformandolo da object ad integer evitando l'errore al run-time..
è l'unica spiegazione che mi viene in mente....
Mi sembra artificioso però non ho idea di come potrebbe essere altrimenti...
Tuttavia quello che diceva fero86 non mi sembrava sbagliato, mi riferisco a
Quote:
un array di Object equivale a tanti riferimenti di tipo Object; questi riferimenti non é detto che contengano oggetti di tipo Object, potrebbero anche contenere oggetti di un qualunque tipo che eredita Object, come ad esempio T. ma potrebbero anche non farlo, da cui il warning. il warning ti dice che se tu casti tutti quei riferimenti di tipo Object a riferimenti di tipo T, a runtime qualcuno di quei riferimenti potrebbe causare una ClassCastException (non so di preciso in che momento) perché potrebbe di fatto contenere un Object anziché un T (per esempio).
Cioè, dovrebbe essere possibile fare
Codice:
String[] a=(String[])new Object[10]; //E in realtà qui da errore
ma non
Codice:
Object[] oA={new Object()};
String[] sA=(String[])oA;
String s=sA[0]; //Qui dovrebbe dare errore
Quote:
Originariamente inviato da fero86 Guarda i messaggi
impone restrizioni sul charset con cui deve essere salvato il file: non tutti i charset supportano i caratteri accentati, cosi come altri caratteri. in generale sarebbe bene usare sempre e solo i caratteri del set ASCII non esteso: lettere minuscole e maiuscole, numeri, punteggiature, simboli comuni.
Non ci avevo pensato, grazie.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Lo compri una volta, lo giochi dove vuoi...
Qiantinuum annuncia Helios, "il com...
Samsung Galaxy S26 Ultra: una sola novit...
Google prepara Gemini 3 Pro e Nano Banan...
TVS non è solo moto e scooter: ec...
Alexa+ arriva su BMW: gli automobilisti ...
Gemini Deep Research arriva su Google Fi...
Rinvii a catena, Marvel 1943: Rise of Hy...
Xiaomi inaugura uno spazio dedicato ai f...
Rilasciate le specifiche di Bluetooth 6....
L'obiettivo che mette tutto a fuoco: la ...
Meta avrebbe raccolto fino al 10% dei ri...
NVIDIA DGX Spark e videogiochi? Una pess...
Serie Oppo Reno15 confermata: arriva il ...
UPDF 2025: l'editor PDF che fa (quasi) t...
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:18.


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