(此系列试题来源于Java面试宝典书籍)
一、问答题
1. 下面的运行结果是?为什么
String str1 = “hello”;
String str2 = “he”+new String(“llo”);
String str3 = “he”+”llo”;
System.err.println(str1== str2);
System.err.println(str1 == str3);
// result:false true
解析:
- == :如果没有new一个实例的话,比较的就是值,如果new了一个实例(对象),比较的是地址
- 栈中的常量池,如果存在一些常量,先去常量池里找,如果没有,再new
2. HashSet里的元素是不能重复的,那用什么办法区分重复与否
-
当往集合里添加元素时,调用 add(Object)方法时候,首先会调用 Object 的 hashCode()方法判hashCode 是否已经存在,如不存在则直接插入元素
-
如果已存在则调用 Object 对象的 equals()方法判断是否返回 true,如果为 true 则说明元素已经存在,如为 false 则插入元素
3. List、set、map是否继承来自Collection接口,存取元素时,有何差异
-
List,Set 是继承 Collection 接口; Map 不是
-
List:元素有放入顺序,元素可重复 ,通过下标来存取和值来存取
-
Map:元素按键值对存取,无放入顺序
-
Set:元素无存取顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在 set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的)
4. 简述java中的值传递和引用传递
值传递
-
按值传递是指的是在方法调用时,传递的参数是按值的拷贝传递
-
按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了
引用传递
-
按引用传递是指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)
5. switch是否作用于byte上,能否作用在long上,是否能作用在string上
-
switch 可作用于 char byte short int
-
switch 可作用于 char byte short int 对应的包装类
-
switch 不可作用于 long double float boolean,包括他们的包装类
6. Java语言如何经行异常处理,请写出几个常见的运行时异常的编译异常
-
throws 是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
-
throw 是语句抛出一个异常
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ClassNotFoundException - 类找不到异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
7. 数据库事务和实际工作中的作用
数据库事务:要么全做完,要么不做
事务回滚:存在两张好不相关的表,修改完第一张表成功,修改第二张表出现异常,则事务回滚到第二张表的原始状态