String和常量池
例题:
以下代码输出什么?为什么?
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = s3.intern();
System.out.println(s1 == s2); // 输出?
System.out.println(s1 == s3); // 输出?
System.out.println(s1 == s4); // 输出?
System.out.println(s3 == s4); // 输出?
System.out.println(s1.equals(s3)); // 输出?
请逐一说明原因,并解释 intern() 方法的作用。
答案
打印结果依次是:true、false、true、false、true
解析:
s1和s2都是字符串常量池的数据,地址一样,s3则是一个java对象,不是字符串常量。s4,即取出s3中的字符串常量,和s1、s2是一样的。
intern方法,如果字符串常量池有相应的数据,则直接返回相应地址,如果没有,则在字符串常量池创建并返回地址
java的异常体系
java中的所有异常,来自throwable接口,这个接口具体有两个实现:error和exception。前者主要是系统级别的错误,内存溢出等;后者主要是业务层面的,后者又分为自检异常和非自检异常,自检异常,即可以提前抓捕以保证程序正常运行的异常,如classnotfount等,非自检异常,即不能提前抓捕的exception异常,比如数组越界等待
泛型
题目:
以下代码为什么有警告/错误?如何修正?
List list = new ArrayList();
list.add("hello");
list.add(123);
for (Object obj : list) {
String s = (String) obj; // 这里有什么问题?
}
另外,请解释:
- 泛型擦除(Type Erasure) 是什么?
- List 和 List 在运行时是同一个类吗?为什么?
答案
警告:List list = new ArrayList();没有声明元素类型
错误: list.add("hello");list.add(123);不能在一个数据添加两种类型的数据
String s = (String) obj;integer转换String会报错
原创
Java基础学习二
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法