【287天】我爱刷题系列046(2017.11.19)

叨叨两句

  1. 把烦心事列出来,挨个给解决方案和时间期限,就没问题叻~java

牛客网——java专项练习026

1

下面赋值语句中正确的是()
正确答案: A线程

  1. double d=5.3e12;code

  2. float f=11.1;对象

  3. int i=0.0;内存

  4. Double oD=3;同步

java中整型默认的是int,浮点默认的是double.
B: double类型的11.1 转成 float,是须要强制转换的
C: double类型的0.0 转成 int,也是须要强制转换的
D: int 转为 封装类型Double,是没法编译的
    Double oD = 3.0, 会把double类型的3.0自动装箱为Double,没有问题
double d1 = 3E12;  
double d2 = 3.0E12;
double d3 = 3e12;
double d4 = 3.0e12;
//如下打印结果均为3.0E12
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);

2

有如下代码:hash

class A{
    public A(String str){
         
    }
}
public class Test{
    public static void main(String[] args) {
        A classa=new A("he");
        A classb=new A("he");
        System.out.println(classa==classb);
    }
}

请问输出的结果是:
正确答案: Ait

  1. falseio

  2. true编译

  3. 报错

  4. 以上选项都不正确

答案为 false  由于== 表示的是否指向的是同一个内存。

 System.out.println(classa.equals(classb));   若是这这样输出 答案也是错误的 由于子类没有覆盖Object
的equals()方法,而默认调用==的这个方法   判断两个对象是否相等须要覆盖equals()方法和hashcaode()方法

3

假设以下代码中,若t1线程在t2线程启动以前已经完成启动。代码的输出是()

public static void main(String[]args)throws Exception {
    final Object obj = new Object();
    Thread t1 = new Thread() {
        public void run() {
            synchronized (obj) {
                try {
                    obj.wait();
                    System.out.println("Thread 1 wake up.");
                } catch (InterruptedException e) {
                }
            }
        }
    };
    t1.start();
    Thread.sleep(1000);//We assume thread 1 must start up within 1 sec.
    Thread t2 = new Thread() {
        public void run() {
            synchronized (obj) {
                obj.notifyAll();
                System.out.println("Thread 2 sent notify.");
            }
        }
    };
    t2.start();
}

正确答案: B

  1. Thread 1 wake up
    Thread 2 sent notify.

  2. Thread 2 sent notify.
    Thread 1 wake up

  3. A、B皆有可能

  4. 程序无输出卡死

notify()就是对对象锁的唤醒操做。但有一点须要注意的是notify()调用后,并非立刻就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一线程,赋予其对象锁,唤醒线程,继续执行。这样就提供了在线程间同步、唤醒的操做。

4

Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面为true的是
正确答案: G

  1. (i == l)

  2. (i == d)

  3. (l == d)

  4. i.equals(d)

  5. d.equals(l)

  6. i.equals(l)

  7. l.equals(42L)

包装类的“==”运算在不遇到算术运算的状况下不会自动拆箱
包装类的equals()方法不处理数据转型
ABC3 个选项很明显,不一样类型引用的 == 比较,会出现编译错误,不能比较。
DEF 调用 equals 方法,由于此方法先是比较类型,而 i , d , l 是不一样的类型,因此返回假。
选项 G ,会自动装箱,将 42L 装箱成 Long 类型,因此调用 equals 方法时,类型相同,且值也相同,所以返回真。
int i = 2;
long k = 2l;
double j = 2.0;
//如下结果都为true
System.out.println(i==j);
System.out.println(k==j);
System.out.println(i==k);