Java|资深架构师整理分享60道全套Java核心技术面试题及答案( 三 )


答:会执行 , 在 return 前执行
23、用最有效率的方法算出 2 乘以 8 等於几
答:2 << 3
24、两个对象值相同(x.equals(y) == true) , 但却可有不同的 hash code , 这句话对不对
答:不对 , 有相同的 hash code
25、当一个对象被当作参数传递到一个方法后 , 此方法可改变这个对象的属性 , 并可返回变化后的结果 , 那么这里到底是值传递还是引用传递
答:是值传递 。 Java 编程语言只有值传递参数 。 当一个对象实例作为一个参数被传递到方法中时 , 参数的值就是对该对象的引用 。 对象的内容可以在被调用的方法中改变 , 但对象的引用是永远不会改变的
26、swtich 是否能作用在 byte 上 , 是否能作用在 long 上 , 是否能作用在 String 上
答:witch(expr1)中 , expr1 是一个整数表达式 。 因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte 。 longstring 都不能作用于 swtich
27、ArrayList 和 Vector 的区别HashMap 和 Hashtable 的区别
答:就 ArrayList 与 Vector 主要从二方面来说.一.同步性:Vector 是线程安全的 , 也就是说是同步的 , 而 ArrayList 是线程序不安全的 , 不是同步的
二.数据增长:当需要增长时Vector 默认增长为原来一培 , 而 ArrayList 却是原来的一半就 HashMap 与 HashTable 主要从三方面来说 。
一.历史原因:Hashtable 是基于陈旧的 Dictionary 类的 , HashMap 是 Java 1.2 引进的 Map接口的一个实现
二.同步性:Hashtable 是线程安全的 , 也就是说是同步的 , 而 HashMap 是线程序不安全的 , 不是同步的
三.值:只有 HashMap 可以让你将空值作为一个表的条目的 key 或 value
28、char 型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的 , 因为 java 中以 unicode 编码 , 一个 char 占 16 个字节 , 所以放一个中文是没问题的
29、GC 是什么? 为什么要有 GC
答:GC 是垃圾收集的意思(Gabage Collection)内存处理是编程人员容易出现问题的地方 , 忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃 , Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的 , Java 语言没有提供释放已分配内存的显示操作方法 。
30、float 型 float f=3.4 是否正确?
答:不正确 。 精度不准确应该用强制类型转换 , 如下所示:float f=(float)3.4
31、介绍 JAVA 中的 Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork 如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

Collection 是最基本的集合接口 , 一个 Collection 代表一组 Object , 即 Collection 的元素(Elements)
Map 提供 key 到 value 的映射
32、抽象类与接口?
答:抽象类与接口都用于抽象 , 但是抽象类(JAVA 中)可以有自己的部分实现 , 而接口则完全是一个标识(同时有多重继承的功能) 。
JAVA 类实现序例化的方法是实现 java.io.Serializable 接口
Collection 框架中实现比较要实现 Comparable 接口和 Comparator 接口
33、STRING 与 STRINGBUFFER 的区别 。
答:STRING 的长度是不可变的 , STRINGBUFFER 的长度是可变的 。 如果你对字符串中的内容经常进行操作 , 特别是内容要修改时 , 那么使用 StringBuffer , 如果最后需要 String , 那么使用 StringBuffer 的 toString()方法
34、谈谈 final finally finalize 的区别
答:final—修饰符(关键字)如果一个类被声明为 final , 意味着它不能再派生出新的子类 , 不能作为父类被继承 。 因此一个类不能既被声明为 abstract 的 , 又被声明为 final 的 。 将变量或方法声明为 final , 可以保证它们在使用中不被改变 。 被声明为 final 的变量必须在声明时给定初值 , 而在以后的引用中只能读取 , 不可修改 。 被声明为 final 的方法也同样只能使用 , 不能重载finally—再异常处理时提供 finally 块来执行任何清除操作 。 如果抛出一个异常 , 那么相匹配的catch 子句就会执行 , 然后控制就会进入 finally 块(如果有的话)finalize—方法名 。 Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作 。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的 。 它是在 Object 类中定义的 , 因此所有的类都继承了它 。 子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作 。 finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的