下面论述正确的是()?
A. 如果两个对象的hashcode相同,那么它们作为同一个HashMap的key时,必然返回同样的值
B. 如果a,b的hashcode相同,那么a.equals(b)必须返回true
C. 对于一个类,其所有对象的hashcode必须不同
D. 如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同
正确答案:D
hashCode方法本质就是一个哈希函数,这是Object类的作者说明的。Object类的作者在注释的最后一段的括号中写道:将对象的地址值映射为integer类型的哈希值。但hashCode()并不完全可靠的,有时候不同的对象他们生成的hashcode也会一样,因此hashCode()只能说是大部分时候可靠。
因此我们也需要重写equals()方法,但因为重写的equals()比较全面比较复杂,会造成程序效率低下,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高。因此,正常的操作流程是先用hashCode()去对比两个对象,如果hashCode()不一样,则表示这两个对象肯定不相等,直接返回false,如果hashCode()相同,再对比他们的equals()。
若有下列定义,下列哪个表达式返回false?
String s = "hello";
String t = "hello";
char c[] = {'h', 'e', 'l', 'l', 'o'};
A. s.equals(t);
B. t.equals(c);
C. s==t;
D. t.equals(new String("hello"));
正确答案:B
在String类型的 equals 方法中,会判断这个字符数组是否是String类的实例,如果不是直接返回false。
在程序代码中写的注释太多,会使编译后的程序尺寸变大。
A. 正确
B. 错误
正确答案:B
注释不会被编译!
下面有关JAVA异常类的描述,说法错误的是?
A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B. 非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D. RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
正确答案:D
D选项,RuntimeException并不必须被捕获。不管异常代表的是可预见的异常条件还是编程错误,如果用try{}catch语句捕获它,会让程序在已经出现错误的情况下继续执行下去,也就是说我们不会及时的察觉到程序出现的问题。如果我们不去处理RuntimeException,让程序在测试阶段把异常传播给外界,这时系统打印出来的调用堆栈路径可以帮助我们更快的找出并修改错误,避免出现更大的损失。
在Java线程状态转换时,下列转换不可能发生的有()?
A. 初始态->运行态
B. 就绪态->运行态
C. 阻塞态->运行态
D. 运行态->就绪态
正确答案:AC