把烦心事列出来,挨个给解决方案和时间期限,就没问题叻~java
下面赋值语句中正确的是()
正确答案: A线程
double d=5.3e12;code
float f=11.1;对象
int i=0.0;内存
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);
有如下代码: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
falseio
true编译
报错
以上选项都不正确
答案为 false 由于== 表示的是否指向的是同一个内存。 System.out.println(classa.equals(classb)); 若是这这样输出 答案也是错误的 由于子类没有覆盖Object 的equals()方法,而默认调用==的这个方法 判断两个对象是否相等须要覆盖equals()方法和hashcaode()方法
假设以下代码中,若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
Thread 1 wake up
Thread 2 sent notify.
Thread 2 sent notify.
Thread 1 wake up
A、B皆有可能
程序无输出卡死
notify()就是对对象锁的唤醒操做。但有一点须要注意的是notify()调用后,并非立刻就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一线程,赋予其对象锁,唤醒线程,继续执行。这样就提供了在线程间同步、唤醒的操做。
Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面为true的是
正确答案: G
(i == l)
(i == d)
(l == d)
i.equals(d)
d.equals(l)
i.equals(l)
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);