内容简介:每周10道 Java 面试题由 ImportNew 整理编译自网络。面试题答案讨论请移步:
每周10道 Java 面试题由 ImportNew 整理编译自网络。
面试题答案讨论请移步: https://github.com/jobbole/java-interview/issues/1 Java面试题投递交流请移步: https://github.com/jobbole/java-interview/issues/2
1. 写出下面代码的运行结果。
int src = 65536; Integer dst = new Integer(65536); System.out.println(src == dst); System.out.println(dst.equals(src));
答案: true true
考点: Integer 的 equals 实现。查看源代码可以发现,65536 装箱为 Integer 对象后,dst.equals 方法比较的是 obj.intValue。
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
2. 写出下面代码执行结果。
// 1. 打印 null String String s = null; System.out.println(s); // 2. 打印 null Integer Integer i = null; System.out.println(i); // 3. 打印 str String str = null; str = str + "!"; System.out.println(str);
答案:
null null null!
考点: 打印函数 print 与字符串拼接函数对 null 都进行了特殊处理,因此不会出现运行时异常,而是输入出 “null” 字符串。
细节分析可参见 Importnew:Java String 对 null 对象的容错处理 一文。
3. 写出下面代码的运行结果。
public class Example { private static void sayHello() { System.out.println("Hello"); } public static void main(String[] args) { ((Example)null).sayHello(); } }
答案: Hello
考点:
null 作为非基本类型,可以做类型转换,转换后调用静态方法输出字符串。基本类型,比如 int,类型转换时会报告空指针异常,比如 int a = (Integer)null; 原因就是转换过程中会调用 intValue(),因此会报告异常。
4. String类能被继承吗,为什么?
答案: 不能。因为 String 类的定义为 final class,被 final 修饰的类不能被继承。
public final class String
考点: String 对象不可变的(immutable)。分析为什么要这么设计,可能有以下3个原因:
- String pool:这是方法(method)区域里一个特殊的存储区域,创建一个 String 时,如果已经在 String pool 中存在,那么会返回已存在的 String 引用。
- 允许 String 缓存 hashcode:String 定义中,有 hash 成员变量 private int hash; // 默认为0,对 hashcode 进行缓存。
- 安全性:确保不会被恶意篡改。
5. 写出下面代码的运行结果。
String s1 = "Cat"; String s2 = "Cat"; String s3 = new String("Cat"); System.out.println("s1 == s2 :"+(s1==s2)); System.out.println("s1 == s3 :"+(s1==s3));
答案:
s1 == s2 :true s1 == s3 :false
考点: 理解 String pool,s1 与 s2 字符串内容相同,因此直接从 String pool 中返回相同的地址。s3 会创建一个新的 String 对象,因此 s1==s3 结果返回 false。
6. String s3 = new String(“Cat”) 这句代码会创建几个 String 对象?
答案: 1 或 2 个。
考点: 理解 String pool 机制。如果 Spring pool 在执行语句之前没有 “Cat” 对象,那么会创建 2 个 String;反之只创建 1 个 String 对象,”Cat” 会从 String pool 中直接返回对象。
7. String、StringBuffer、StringBuilder的区别?
答案: 有以下区别:
- String 是不可变的,StringBuffer、StringBuilder 是可变的;
- String 、StringBuffer 是线程安全的,StringBuilder 不是线程安全的。
- StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
8. 如何比较两个字符串?使用 “==” 还是 equals() 方法?
答案: 简单来讲,“==” 测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值是否相等。除非你想检查的是两个字符串是否是同一个对象,否则你应该使用 equals() 来比较字符串。
用之前的例子:
String s1 = "Cat"; String s3 = new String("Cat"); System.out.println("s1 == s3 :"+(s1==s3)); System.out.println("s1.equals(s3) :"+(s1.equals(s3)));
运行结果:
s1 == s3 :false s1.equals(s3) :true
9. 为什么针对安全保密高的信息,char[] 比 String 更好?
答案: 因为String是不可变的,就是说它一旦创建,就不能更改了,直到垃圾收集器将它回收。而字符数组中的元素是可以更改的,这就意味着你可以在使用完之后将其更改,而不会保留原始数据。所以使用字符数组的话,安全保密性高的信息,如密码之类信息,将不会存在于系统中被他人看到。
10. 可以针对字符串使用 switch 条件语句吗?
答案: JDK 7 及更新版本可以,在JDK 6或者之前的版本,则不能使用 switch 条件语句。
关于作者:唐尤华
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个 程序员 的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员。(新浪微博: @唐尤华 )
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Python面试经验总结,面试一时爽,一直面试一直爽!
- 算法面试:数组编码面试问题
- 【面试虐菜】—— JAVA面试题(1)
- 如何面试-作为面试官得到的经验
- PHP面试之网络协议面试题
- 如何克服面试紧张心理 ?(面试答题篇Ⅲ)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。