Java易错知识点

  • 最近在看Java基础知识的视频,因为距离大二学习基础知识的时光有些久远了,并且当时也并没有进行总结,所以写下这个博客权当做笔记,方便温故而知新。

强制转换

1
2
3
4
5
6
7
8
9
10
11
第一种情况
byte a = 1;
a = 3 + 4;
System.out.println(a);

第二种情况
byte a = 1;
byte b = 3;
byte c = 4;
a = b + c;
System.out.println(a);
  • 在这两种情况下,最后运行的值有什么不同那?
  • 第一个的值最后为7;第二个运行后运行错误,显示可能损失精度。
  • 第一种情况下,因为3和4是int值,a是byte值,当a=3+4时,运算符对左右两边进行了一个判断,如果右边的数在byte的范围内,则自动将其强制转换,赋值给a。
  • 第二种情况下,b、c都是变量,系统不可以自动将其强制转换,因为他们可能是一个大于byte范围的数。

算数运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第一种情况
int x = 3, y;
y = x++;
System.out.println(x);
System.out.println(y);

第二种情况
int x = 3, y;
y = ++x;
System.out.println(x);
System.out.println(y);

第三种情况
int a = 3;
a = a++;
System.out.println(a);
  • 运行结果分别是什么?
1
2
3
x = 4  y = 3
x = 4 y = 4
a = 3
  • 第一种情况涉及到了运算符的原理,系统是如何对 y=x++ 这个式子进行处理的那,先将 x 原先的值3存储起来,再对x进行++运算,最后进行=运算的时候将预存的x的值赋给y。
  • 第二种情况主要式子是 y=++x ,这次是直接进行 ++x 的运算,再将他赋给y。
  • 第三种情况和第一种情况大致相同,为了方便理解,我将 a = a++ 在内存中的处理过程写成程序。通过下面的代码就能够了解为什么最后的结果是3了。
1
2
3
4
int a = 3;
temp = a;
a++;
a = temp;

+=运算问题

1
2
3
short s = 3;
s += 4;
s = s + 4;
  • 第二个式子和第三个式子有什么不同?

  • 第二个式子可以运行成功,第三个式子不可以。在这里4是int值,+=是一个
    运算符,他会对右边的数进行判断,是否在short的范围内再自动进行强制转换,
    赋值给s。而第三个式子=的右面面对的是变量s,必须手动进行强制转换。

%运算问题

1
2
a = -5 %  2;
b = 5 % -2;
  • a和b的值分别是多少?

  • a = -1,b = 1 取模运算只有 %左边是负数的情况下对结果有影响