SóProvas


ID
51268
Banca
CESGRANRIO
Órgão
TJ-RO
Ano
2008
Provas
Disciplina
Programação
Assuntos

Em Java, a atribuição composta x += y é equivalente a x =(T)(x + y), onde T é o tipo de x. Com base nesta premissa, considere as duas linhas de programa a seguir.

x += y;
x = x + y;

A primeira linha compilará, e a segunda linha irá gerar um erro em tempo de compilação, se x e y forem declarados, respectivamente, como:

Alternativas
Comentários
  • Não é possível converter o tipo int, de 32 bits, em um tipo short, de 16 bits
  •     * Um byte pode ser convertido em um short, int, long, float ou double
        * Um short pode ser convertido em um int, long, float ou double
        * Um char pode ser convertido em um int, long, float ou double
        * Um int pode ser convertido em um long, float ou double
        * Um long pode ser convertido em um float ou double
        * Um float pode ser convertido em um double

    Erro na questão:
    public class Main{
        public static void main(String[] args) {       
            short x = 50;
            int y = 10;       
            x += y;
            x = x + y; //  Não pode convert int para short
        }
    }

  • A alternativa E tbm dá erro de compilação:

    incompatible types
      required: int
      found:    java.lang.String
  • Na verdade pode ser convertido, mas apenas se fizer o cast explicitamente
  • A conversão para um tipo diferente necessitaria de uma conversão explícita, o que poderia levar, por exemplo, a uma truncagem de dados.
  • Comentando as opções:

    a) short e int (certo: primeira linha compila, mas a segunda não)

    x += y;  ==> equivalente a x = (short) (x+y)

    não há problema nesta construção, pois é possível converter de int para short.
     
    x = x + y; 

    não compila, pois o resultado da soma deve ser convertido para short.

    Esta é a opção correta, pois a primeira linha compila, mas a segunda não.

     

    b) int e short (errado: ambas as linhas compilam corretamente)

    O tipo int é "superior" ao short, não sendo necessário efetuar a conversão.


    c) int e char (errado: ambas as linhas compilam corretamente)

    Ao executar a soma, será considerado o código ASCII do caractere utilizado.

    Ex.:


    int x = 1;
    char y = 'a';


    x += y; (resultado: 98)
    x = x + y; (resultado: 98)


    Em ambas as instruções será obtido o valor 98, pois o código do caractere 'a' na tabela ASCII é 97.


    d) String e int  (errado: ambas as linhas compilam corretamente)

    Neste caso o valor do int será convertido para String e concatenado com a String original.

    Ex.: 


    String x = "a";
    int y = 1;

    x += y; (resultado: a1)
    x = x + y; (resultado: a1)


    e) int e String (errado: as duas linhas apresentarão erro de compilação)

    x += y; (erro: o operador "+=" não está definido para os tipos int e String)
     
    x = x + y; (erro: não é possível converter de String para int)
  • Veja os comentários no link a seguir:

    http://www.questoesdeconcursos.com.br/questoes/a6acbb08-75