Java 面试题整理

1. 为什么下列代码中c = 3+7;可以正确输出,c = a + b;却编译报错?

public static void main(String[] args) {
    byte a = 3;
    byte b = 7;
    byte c = 10;
    c = 3+7;//37是常量,int类型。
    System.out.println(c);//可以正确输出。
    c = a + b;//编译报错,因为ab是变量,无法检查ab的范围是否在可存储范围之内。
    /*
   
为什么c = 3+7;可以正确输出,c = a + b;却编译报错?
    因为 c = 3+7;37是常量,值是固定的,不会变,可以判断在存储范围之内。
       c = a + b;编译报错,因为ab是变量,无法检查ab的范围是否在可存储范围之内。
    结论:右边不确定是无法判断并赋值的。
     */
}

 注意:整数默认是int类型。

结论:右边不确定是无法判断并赋值的。

2.下述代码的运算结果为何是3

public static void main(String[] args) {
    int a = 3;
    a = a++;
    System.out.println(a);
}

运算如下:

tmp = a;
a = a+1;
a=tmp;

Java 面试题整理

结论:在内存中运算顺序如下:

  1. 先将a=3记录到临时存储空间中;
  2. 再做a++运算,即3+1=4,再赋值给a,此时a=4;
  3. 再将(1)中临时存储空间中记录的a的值赋值给a, 此时a=3;