+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 3 su 3

[Java] problema con i tipi di dato - casting e promotion

  1. #1
    L'avatar di imbranato
    imbranato non è in linea Scolaretto
    public class Esercizio3a{
         public static void main(String args[]) {
             int a =5;
             int b =3;
             double r1 = (double) a/b; //Casting di r1 
             System.out.println("R1 casting da Int a Double = " +r1); 
             float r1bis = (float) r1;
             System.out.println("R1 casting da Double a Float = " + r1bis + " perdita dati");
    
             char c = 'a';
             short s = 5000;
             int r2 = c*s;
             System.out.println("r2 = " +r2);                                
             
            int i =6;
            float f =3.14F;
            float r3 = i+f;
            System.out.println("r3 = " +r3);
             
           double r4 = r1- r2 - r3;
           System.out.println("R4 = " +r4);
             }
       }
    
    ho scritto questo codice ... prendendo spunto da un esercizio proposto <cut>

    ho fatto l'esercizio da solo e mi sono sbagliato all'inizio(r1) usando float anziche double con una conseguente perdita di dato. r2 avevo scelto un tipo di dato che dava un valore differente ed r3 l'avevo cannato totalmente.

    LA DOMANDA E' QUESTA: che differenza c'è tra CASTING E PROMOTION e sopratutto come posso non cannare i tipi di dato? in basic .net era tutto così chiaro e semplice ... aiutooooooooo
    Ultima modifica di AntonioG; 29-10-2013 15:43  Motivo: A questo punto è spam ... da dove non ha importanza
    ℹ️ Leggi di più su imbranato ...

  2. #2
    Paolodocet non è in linea Novello
    Ciao, in realtà e cose sono abbastanza semplici. Per prima cosa, dai un'occhiata al seguente elenco, ti dice qualcosa?

    byte--->short--->int--->long--->float--->double

    "In Java, un valore può essere assegnato a una qualsiasi variabile il cui tipo sta alla destra del tipo del valore nell'elenco precedente."

    La definizione di prima, non è tanto chiara. In altri termini, per esempio, puoi assegnare a una variabile di tipo int, una variabile di tipo long, float, double:

    int pippo=2;
    double pluto;
    // *************************************************
    pluto=pippo; //assegnamento corretto ed automatico, non è necessario esplicitarlo!! 
    //********************************************************
    
    Il viceversa, non viene svolto automaticamente, ed in questo caso è necessario un casting fatto esplicitamente dal programmatore, col rischio di perdere dati(...conosci la storia del troncamento, no??). In codice:

    double pippo=2.6;
    int pluto;
    //**************************************************
    pluto=pippo; //assegnamento illecito
    pluto=(int)pippo; //assegnamento lecito ma con trocamento
    
    //Quanto varrà pluto dopo il casting??
    //**************************************************
    
    Ti rendo la vita più facile:
    Il casting automatico(promotion) si verifica, quando data una variabile di un tipo X, vuoi assegnare tale variabile ad un'altra di tipo Y, tale che X si trovi alla sinistra di Y, nell'elenco che ti ho scritto all'inizio della pagina.

    Quindi, graficamente prendendo per esempio una variabile, come nell'esempio di prima:
    int pippo=3;

    byte--->short--->int---> | //Java, converte automaticamente se assegno pippo a una variabile di questi tre tipi.
    |
    |long--->float--->double

    Java, non converte automaticamente se data una variabile di tipo X, si vuole assegnare tale variabile ad un'altra di tipo Y, tale che rispetto a Y, X si trovi a destra dell'elenco.

    Con un piccolo grafico:
    double pippo=3.4;

    byte--->short--->int(Y)--->long--->float--->|
    |
    Java, NON converte automaticamente |double(X)
    se assegno pippo a uno di questi tipi


    Per finire, prendiamo una variabile di tipo long e facciamo il seguente grafico:

    byte--->short--->int--->long--->float--->double

    JAVA NON CONVERTE AUTOMATICAMENTE DA LONG:
    I tipi scritti in verde;
    JAVA CONVERTE AUTOMATICAMENTE DA LONG:
    I tipi scritti in giallo;

    Ciao, spero di essere stato abbastanza chiaro.

  3. #3
    L'avatar di imbranato
    imbranato non è in linea Scolaretto
    chiarissimo! finalmente ho capito. grazie
    ℹ️ Leggi di più su imbranato ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. MSSQL Problema conversione tipi
    Da CC88 nel forum Microsoft SQL Server
    Risposte: 11
    Ultimo Post: 03-09-2020, 10:30
  2. problema java
    Da eugenio nel forum Microsoft Windows
    Risposte: 4
    Ultimo Post: 12-02-2013, 11:17
  3. Risposte: 2
    Ultimo Post: 26-03-2012, 12:22
  4. [Generale]Relazione uno a molti e tipi di dato
    Da Sambu nel forum Altri Database Server
    Risposte: 5
    Ultimo Post: 08-06-2011, 14:50
  5. come usare l'operazione di casting
    Da giangi_luca nel forum C#
    Risposte: 5
    Ultimo Post: 09-05-2010, 17:24