【Java面试题】short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

昨天去面试,虽然体验不是很好, 但是看到了这个面试题,当时感觉无从下手,所以在这里记录一下。

解决这道题之前,先复习一下Java的基本数据类型转换规则,以便后面对面试题的理解。

java的基本数据类型转换

  • 自动类型转换:小–>大 byte-->short-->int-->long-->float-->double

  • 强制类型转换:大–>小 小类型 变量名 = (大类型) 值

    注意:自增/自减运算符、复合赋值运算符底层做了优化,内部自动强制类型转换;

    如:++, --, +=, -=, ......

  • 类型提升:是指在多种不同数据类型的表达式中,类型会自动向范围表达大的值的数据类型提升;

    long count = 1000000;
    int price = 1999;
    long totalPrice = price * count;
    

正文——面试题

1. short s1 = 1; s1 = s1 + 1;

错误!

根据java的基本数据类型转换规则,s1为short类型的变量,在表达式s1 = s1 + 1;中,s1会自动转为int类型与1进行运算,运算结果为int类型,而int类型的值 赋值给short类型的变量时需要强制类型转换。

2. short s1 = 1; s1 += 1;

正确!

在复合赋值运算符底层自动进行强制类型转换,所以此处实际上是s1 = (int) s1 + 1;因为此处有强制类型转换,所以编译可以通过。

你可能感兴趣的:(【Java面试题】short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?)