Il valore intero predefinito di Java è int

3

Il mio codice è simile a questo

import java.util.Scanner;


public class StudentGrades {

public static void main(String[] argv)
{
    Scanner keyboard = new Scanner(System.in);
    byte q1 = keyboard.nextByte() * 10;
}
}

Mi dà un errore Type mismatch: cannot convert from int to byte.

Perché Java memorizza un operando letterale che è abbastanza piccolo da stare in un byte, in un tipo int? I letterali vengono memorizzati in variabili / registri prima che l'ALU esegua operazioni aritmetiche?

    
posta Chris Okyen 11.10.2012 - 01:36
fonte

1 risposta

12

Il problema è la riga byte q1 = keyboard.nextByte() * 10; . Non ci sono operazioni aritmetiche su byte o short . Il valore di keyboard.nextByte() viene assegnato a un int prima della moltiplicazione con 10, che è anche un int . Il risultato della moltiplicazione è un int , che non può essere memorizzato in q1 se è definito come byte .

Le possibili soluzioni consistono nel trasmettere il risultato della moltiplicazione a un byte utilizzando (byte) (keyboard.nextByte() * 10) o modificando il tipo di q1 in int .

Sfortunatamente, non sto trovando un riferimento a questo nei tutorial. Tuttavia, puoi trovare una spiegazione nella specifica della lingua Java . Sezioni 5.6.2 Promozione numerica binaria e 15.18.2 Operatori additivi (+ e -) per numerico I tipi definiscono questo comportamento.

    
risposta data 11.10.2012 - 02:01
fonte

Leggi altre domande sui tag