牛客网刷题笔记——错题集1

1、在基本JAVA类型中,如果不明确指定,整数型的默认是什么类型?带小数的默认是什么类型?

错误答案:int float   正确答案:java整数型的默认类型是int,小数的默认类型是double

2、下列的输出结果是什么?

 1 public class Test{
 2     static int cnt = 6;
 3     static{
 4         cnt += 9;
 5     }
 6 public static void main(String[] args){
 7     System.out.println(“cnt =” + cnt);
 8 }
 9 static{
10     cnt /=3;
11     };
12 }

正确答案:cnt=5

查看答案解析有的人说:静态初始化块,静态变量,先执行静态变量在执行静态初始块。

而另一位同学做实验,并且我自己也运行了下面这个例子:

public class Test {
    static {
        cnt = 6;
    }

    static int cnt = 100;

    public static void main(String[] args) {
        System.out.println("cnt = " + cnt);
        //最后输出是50,如果按照错误说法就应该是3
        //按顺序执行就是cnt=6--->cnt=100---->cnt = 100/2 = 50.
    }

    static {
        cnt /= 2;
    }
}

最终输出结果是:50,其实是Java的向前引用,加载的机制应该是先声明所有的变量,但是现在只是声明而已所以是cnt是int的默认值0,然后按照声明语句和静态块的先后顺序依次对cnt进行操作,所以最后会输出50。

最终的顺序:父类的成员变量声明->按书写顺序执行父类静态成员变量和静态块->子类的成员变量声明->按书写顺序执行子类静态成员变量和静态块

3、下列代码的输出结果是什么?

1 System.out.println(“is ”+ 100 + 5);
2 System.out.println(100 + 5 +“ is”);
3 System.out.println(“is ”+ (100 + 5));

错误答案:is 105, 105 is, is 105

正确答案:is 1005, 105 is, is 105

解析:“+”是按照从左到右顺序执行的,除非是加括号,并不会先执行算数操作

4、socket编程中,以下哪个socket的操作是不属于服务端操作的()?

A、accept
B、listen
C、connect
D、close

错误答案:D

正确答案:C

解析:服务器端也可以关闭连接,客户端主动连接(connect),服务器端进行监听阻塞

 5、

 1 public class DataObject implements Serializable{
 2     private static int i=0;
 3     private String word=" ";
 4     public void setWord(String word){
 5         this.word=word;
 6     }
 7     public void setI(int i){
 8         Data0bject. i=I;
 9      }
10 }
11 创建一个如下方式的DataObject: 
12 
13 DataObject object=new Data0bject ( );
14 object. setWord("123");
15 object. setI(2);

将此对象序列化为文件,并在另外一个JVM中读取文件,进行反序列化,请问此时读出的Data0bject对象中的word和i的值分别为()

A、"", 0
B、"", 2
C、"123", 2
D、"123", 0

错误选项:C

正确选项:D

解析:序列化保存的是对象的状态,静态变量属于类的状态,因此,序列化并不保存静态变量。所以i是没有改变的,并且被transient标注的成员变量也不会被序列化。

6、下面程序的运行结果()

 1 Object obj=new Object();
 2         List aList=new ArrayList();
 3         List bList=new LinkedList();
 4          
 5         long t1=System.currentTimeMillis();
 6         for(int i=0;i<50000;i++){
 7             aList.add(0,obj);
 8         }
 9         long t2=System.currentTimeMillis()-t1;
10          
11         t1=System.currentTimeMillis();
12         for(int i=0;i<50000;i++){
13             bList.add(0,obj);
14         }
15         long t3=System.currentTimeMillis()-t1; 

错误答案:t3>t2

正确答案:t2>t3

解析:这题做错属于马虎大意,ArrayList底层使用数组实现,LinkedList底层使用链表,所以ArrayList查找速度比LinkedList快,LinkedList插入比ArrayList快

7、经过强制类型转换以后,变量a,b的值分别为多少?

1 short a =1282 byte b =(byte) a;

错误答案:编译错误

正确答案:128,-128

分析:首先要了解byte的组成,byte有八位由于第一位是符号位,byte的取值范围是-128~127,a的后八位为10000000,赋值给byte就变成了10000000,但此时1为符号位。所以byte的10000000为-128

8、以下哪个式子有可能在某个进制下成立()?

A、13*14=204

B、12*34=568

C、14*14=140

D、1+1=3

正确答案:A

解析:首先从A开始试,设进制为X则A选项为:(1*x^1 + 3*x^0)(1*x^1 + 4*x^0) = 2*x^2+0*x^1+4*x^0

整理得:x^2-7x-8=0

根据求根公式:

最终得出解:-1和8,以下选项以此类推,因为A选择有正解,故正确答案为A

原文地址:https://www.cnblogs.com/fengyun2019/p/11159008.html