Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460

    qual'è il nome giusto per una "istanza" di un tipo primitivo?

    è corretto in java chiamare "variabile" una "istanza" di un tipo primitivo?

    la domanda, che mi rendo conto essere banale, nasce dalle nozioni secondo la quali:

    la super classe di Java è Object
    tutto in Java è derivato da Object
    tutto è un oggetto in Java

    se però uso l'operatore instanceof tra un int e Object il compilatore mi segnala un errore: cos'è un int? come lo chiamo a voler essere corretto?

    secondo la teoria che ho studiato mi verrebbe da dire che un instanceof tra un int e un Object dia TRUE e sempre e solo TRUE, in realtà la pratica mi dice che non solo non da TRUE ma neanche FALSE perché è una operazione illegale per il compilatore e semplicemente non la posso fare.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il tipo primitivo non è un oggetto e non è un derivato da object.
    E' la rappresentazione dei comuni tipi di dati a tutti i linguaggi.
    Dalla versione 6 di java

    codice:
    int test = 4; 
    
    if (test instanceof Integer) System.out.println("true");
    else System.out.println("false");
    dovresti avere true visto che c'è il boxing/unboxing automatico dei tipi primitivi

  3. #3
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da valia
    il tipo primitivo non è un oggetto e non è un derivato da object.
    E' la rappresentazione dei comuni tipi di dati a tutti i linguaggi.
    Dalla versione 6 di java

    codice:
    int test = 4; 
    
    if (test instanceof Integer) System.out.println("true");
    else System.out.println("false");
    dovresti avere true visto che c'è il boxing/unboxing automatico dei tipi primitivi
    In questo caso non faccio una comparazione ( instanceof ) ?
    Cosa c'entra l'unboxing se è una comparazione ? Cioé instanceof come procede ?
    Se int è primitivo e Integer è una classe, la comparazione tra le due mi dovrebbe dare FALSE.

    se facessi una assegnazione capirei il funzionamento di boxing/unboxing, ma se dico "compara caio con tizio" non si dovrebbe modificare ne caio ne tizio, ancor di più a me non interessa neanche il valore, mi interessa solo se quell'oggetto è una istanza o meno di una classe, che senso ha andare a vedere cosa c'è dentro ( unboxing ) ?

  4. #4
    Originariamente inviato da valia
    il tipo primitivo non è un oggetto e non è un derivato da object.
    E' la rappresentazione dei comuni tipi di dati a tutti i linguaggi.
    Dalla versione 6 di java

    codice:
    int test = 4; 
    
    if (test instanceof Integer) System.out.println("true");
    else System.out.println("false");
    dovresti avere true visto che c'è il boxing/unboxing automatico dei tipi primitivi
    L'autoboxing non c'entra nulla con l'operatore instanceof, in quanto, a sinistra richiede esplicitamente un riferimento ad un oggetto:
    codice:
    5 instanceof Object // Non consentito
    new Integer(5) instanceof Object // Consentito
    perchè, l'operatore new invocando il costruttore della classe Integer ne crea una istanza allocando memoria e restituisce il riferimento.

  5. #5
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    quindi il compilatore analizza la riga con l'istanceof e si blocca e restituisce un errore appena analizza il fatto che l'etichetta a sinistra punta ad un valore e non ad un riferimento? e se volessi dargli quel valore come riferimento?

  6. #6
    Originariamente inviato da Freax
    quindi il compilatore analizza la riga con l'istanceof e si blocca e restituisce un errore appena analizza il fatto che l'etichetta a sinistra punta ad un valore e non ad un riferimento?
    Se tu provi a compilare questa riga di codice:
    codice:
    System.out.println( 5 instanceof Object );
    nella console, ottieni un errore tipo:
    codice:
    <nomeclasse.java>:<riga>: unexpected type
    found: int
    required: reference

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da VincenzoTheBest
    L'autoboxing non c'entra nulla con l'operatore instanceof, in quanto, a sinistra richiede esplicitamente un riferimento ad un oggetto:
    codice:
    5 instanceof Object // Non consentito
    new Integer(5) instanceof Object // Consentito
    perchè, l'operatore new invocando il costruttore della classe Integer ne crea una istanza allocando memoria e restituisce il riferimento.
    scusa ma io ricordavo che anche quello funzionava, visto che dovresti essere in grado di usare il tipo primitivo alla stregua dell'oggetto

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Mi pare che l'autore del post abbia già dei dubbi piuttosto forti sui fondamenti del linguaggio, senza introdurre ulteriori complicanze con l'operatore instanceof.

    Dicesi Classe un modello che rappresenta un tipo di dato
    Dicesi istanza un oggetto concreto di un determinato tipo di dato
    Dicesi tipo primitivo uno qualunque dei seguenti tipi di dato: byte, short, int, long, float, double, boolean o char.
    Dicesi variabile il nome con cui si identifica un valore (sia esso di tipo primitivo, che oggetto).

    Una variabile di tipo primitivo NON è istanza di nulla, perchè non è un oggetto.
    Una variabile di un tipo NON primitivo, può rappresentare l'istanza di una classe. Dico "può" perchè esiste sempre il riferimento "null".

    Supponendo che una determinata variabile rappresenti l'istanza di una classe, in gergo ci si limita a dire che quella variabile è istanza di quella classe.

    Speriamo, almeno, di aver dipanato i dubbi più basilari.

    PS: le tre "nozioni" che hai acquisito sono TUTTE false.

    1) La superclasse di tutti gli oggetti in Java è Object... questo esclude i tipi primitivi
    2) Tutto in Java è derivato da Object, tranne i tipi primitivi
    3) NON tutto è un oggetto in Java: i tipi primitivi non lo sono.


    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

  9. #9
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    grazie mille, nel testo che ho ( 45€ di libro per più di 500 pagine ), queste cose non vengono citate, neanche implicitamente, le famose 3 nozioni che ho scritto vengono date per assodate in vari punti del testo, con la pratica ho visto che non era così e chiedendo aiuto a voi ho ottenuto conferma; credo che non comprerò più un testo italiano per imparare qualcosa appartenente al mondo dell'IT e della programmazione.

    ritornando a noi: esiste il tipo NULL? e questo è l'unica alternativa oltre i tipi primitivi e le classi?

    mi interessa anche l'operatore instanceof, grazie mille per il chiarimento, molto puntuale, se c'è qualcosa da aggiungere vi prego di farlo

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Freax
    ritornando a noi: esiste il tipo NULL? e questo è l'unica alternativa oltre i tipi primitivi e le classi?
    null (scritto rigorosamente in minuscolo) è il valore di default per tutte le variabili di tipo "oggetto" (quindi, non primitivo). E' un valore che sta ad indicare che la variabile non è inizializzata o, comunque, non "punta" verso nessun oggetto ed è, di fatto, inutilizzabile.

    Tutte le variabili hanno un "valore di default" che dipende dal tipo della variabile. Ciascuna variabilie di uno dei tipi primitivi ha un suo valore di default (significa, che viene assegnato automaticamente se non diversamente specificato dal programmatore). In questo documento sono specificati tutti i valori di default per le variabili di tipo primitivo. Le variabili di tipo "oggetto" hanno per default il valore null.

    mi interessa anche l'operatore instanceof, grazie mille per il chiarimento, molto puntuale, se c'è qualcosa da aggiungere vi prego di farlo
    L'operatore instanceof permette di capire se il valore di una determinata variabile è di un certo tipo. Funziona solo con le variabiil di tipo "oggetto" (reference, per usare la terminologia tecnica). E' un operatore che richiede due operandi: la variabile su cui effettuare il test ed il nome della classe con cui si desidera effettuare il confronto. L'autoboxing non funziona con l'operatore instanceof (ma stiamo andando decisamente fuori tema, non mi pare il caso di parlare di questa cosa se non sono ben chiare, prima, tutta una serie di altre nozioni).

    Esempi di tale operatore se ne trovano ovunque e, sono certo, c'è anche una discussione qui sul forum dove vengono prese in considerazione alcune "problematiche" relative a tale operatore e metodi alternativi per ottenere lo stesso risultato (o risultati più precisi, a seconda dell'esigenza).


    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

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.