public class JavaTest {
public static strictfp void main(String[] args) {
method0(); // 此方法主要用于测试运算顺序,比较简单method1(); // 此方法测试快速运算,虽然第二个判断条件有错误,但是都不会运行到第二个判断条件地方method2(); // 测试向上转型问题,float i = 9 / 2;虽然i为float类型,但是先运算的是9/2,计算结果为4,再将4赋值给i,所以为4.0method3(); // 测试向下转型问题,short i = 9 / 2; 9/2为4,赋值给short类型的i,然后再加2.5,计算结果为整数6,赋值给imethod4(); // 测试++i,i++问题,没什么好说的method5(); // 测试位移运算,值得注意的是1 << 35,这个结果与机器码长度相关method6(); // 这个方法最具有迷惑性,测试的是误差问题,机器码不能完整表示0.1这个数字
System.out.println(method7()); // 测试返回值问题,值得注意的是在final中又对返回值做了修改,所以返回值为b + a
}
private static void method0() {int a = 1;int b = 2;int c = 3;a += b += c;System.out.println("a=" + a + ",b=" + b + ",c=" + c);}
private static void method1() {int x = 0;int y = 6;if ((x != 0) && (x < y / x)) {System.out.println("&&");}if ((x == 0) || (x < y / x)) {System.out.println("||");}}
private static void method2() {float i = 9 / 2;System.out.println(i);}
private static void method3() {short i = 9 / 2;i += 2.5;System.out.println(i);}
private static void method4() {int m = 7;int n = 7;int a = 2 * ++m;int b = 2 * n++;System.out.println("m=" + m + ",n=" + n + ",a=" + a + ",b=" + b);}
private static void method5() {System.out.println(-2 >> 1); // 符号位填充高位System.out.println(-2 >>> 1); // 0填充高位System.out.println(-2 << 1); // 0填充低位,符号位不变System.out.println(1 << 35); // 与1<<(m%n)相同 n为机器字节码长度}
private static void method6() {System.out.println(1 - 0.9);}
private static int method7() {int a = 1;int b = 2;try {int c = b / a;return c;} catch (Exception e) {e.printStackTrace();} finally {if (true) {return b + a;}}}return b - a;
}
运行结果:
a=6,b=5,c=3
||
4.0
6
m=8,n=8,a=16,b=14
-1
2147483647
-4
8
0.09999999999999998
3