java基础知识-意想不到的结果

来源:互联网 发布:linux tar解压缩 zip 编辑:程序博客网 时间:2024/05/01 16:30
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.0
method3(); // 测试向下转型问题,short i = 9 / 2; 9/2为4,赋值给short类型的i,然后再加2.5,计算结果为整数6,赋值给i
method4(); // 测试++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

0 0
原创粉丝点击