前言:
刷题刷题,持续刷题,每天刷个几时道,身体倍儿爽。
错题集:
第一题:
java语言的下面几种数组复制方法中,哪个效率最高?
for 循环逐一复制 System.arraycopy Array.copyOf 使用clone方法
答案:System.arraycopy
题目解析:
复制的效率System.arraycopy>clone>Arrays.copyOf>for循环。这里面在System类源码中给出了arraycopy的方法,是native方法,也就是本地方法,肯定是最快的。而Arrays.copyOf(注意是Arrays类,不是Array)的实现,在源码中是调用System.copyOf的,多了一个步骤,肯定就不是最快的。前面几个说System.copyOf的不要看,System类底层根本没有这个方法,自己看看源码就全知道了。
第二题:
class Test {
public static void hello() {
System.out.println("hello");
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}
答案是:hello
题目解析:
why?这题是个巨坑,巨坑。test对象是要在java堆区才会有引用,但是加了static的方法或变量是属于类的。test=null,在堆中没有引用,但是可以根据声明Test找到对应的静态方法。
在简单地点的理解就是:类名调方法。Test.hello();
第三题:
public class MyApplication {
public static void main(String[] args) {
System.out.println("-----------------------");
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2))
{
x++;
++y;
k++;
}
}
System.out.println(x + "" +y + "" +k);
}
}
答案:
题目分析:
++i和i++的区别我想大家应该都知道了吧。一个赋值前加1,一个赋值后加1。那就开始每轮解析:
第一轮:z=0 x=1(&&是所有成立才为true,因为++i后是1还是小于2,后面的就不走了)
第二轮: z=1 x=2
第三轮:z=2 x-3 y=1(++x已经是三了,通过后执行下一个++y,所有是1)
第四轮:z=3 x=4 y=2
第五轮:z=4 x=5 y=3 (这时候k还是0,别急着,这里因为是后++)
第六轮: z=5 判断不符合,要跳出循环 所有x =5 y =3 k=1(上一轮的k++这时候就起效了)
总结:
这又是一道i++和++i的题。我服了,做几次还是错几次。重新做一步步来又不错。。服了。。满满的服气。理论感觉都好,可以一遇到题目就不能变通了。唉~社会,社会。