一、数据类型:
阅读如下代码,写出运行结果。
public class Rigorous{
public static void mian (String [] args){
double d=10.00;
double f=9.30;
System.out.println(d-f);
}
}
答:在这道题中,很多初学者会毫不犹豫写上“0.7”,但结果却是“0.699999999993”,这结果出乎意料,想要得到正确的结果可先将浮点类型装换成整型计算后,再讲整形转换成浮点型:
public class SwitchLong{
public static void main(String[] rags){
double d=10.00;
double f=9.30;
long d1=(long)(d*100);
long f1=(long)(f*100);
double re=(d1-f1)/100.0;
System.out.println(re);
}
}
二、运算符与表达式
1、What will happen when you attempt to compil and run the following code?(编译并运行下面的代码,会输出什么结果?)
public class Inc{
public static void main(String[] rags){
Inc inc=new Inc();
int i=0;
inc.fermin(i);
i=i++;
System.out.println(i);
}
void fermin(int i){
i++;
}
}
A.Compile time errror(编译错误)
B.Output of 2(输出2)
C.Output of 1(输出1)
D.Output of 0(输出0)
答:可以看出,fermin方法并不会返回值,所以i=0,接下来执行了i=i++语句后,i不会马上得到1,所以输出的还是0,选择D。但是如果把i=i++变成i++,则输出语句中再次调用i时,其值已经变成1。
2、“||”是短路或,在运算时第一个表达式为true,则不会计算第二个表达式的值;“|”或运算则是两个都要计算比较;“&&”短路与运算时,第一个表达式为false时,不用再比较第二个表达式;“&”与则是两个都要比较。
三、方法
1、已知程序如下:
public class MethodTest01{
public static void main(String[] args){
int i=test(-1);
System.out.print(i);
}
public static int test(int a){
if (a<0){
return a++;
}
}
}
程序运行的结果为()
A、编译通过并输出-1
B、编译通过并输出0
C、编译错误,因为缺少返回值
D、编译错误,因为调用test()方法错误
答:这里有个坑,很多人想当然地认为应该输出-1,其实不是这样的。上面的程序是无法通过编译的,因为test()方法的返回值类型是int型,但是程序却有可能没有返回值。试想一下,如果输入的参数是1,那么if里面的代码就不会执行,也就没有返回值了。所以选C。
2、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。