文章目录
-
- 1. String 是最基本的数据类型吗?
- 2. Java 中操作字符串都有哪些类?它们之间有什么区别?
- 3. String、StringBuffer和StringBuilder区别(类似上一题)
- 4. String str="i"与 String str=new String("i")一样吗?
- 5. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
- 6. 是否可以继承 String 类?
- 7. String 类的常用方法都有那些?
- 8. String s = new String("xyz");创建了几个StringObject?是否可以继承String类?
- 9. **下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";**
- 10. 如何实现字符串的反转及替换?
- 41. Java反射的作用于原理
- 11. 反射的实现方式
- **12. 实现Java反射的类:**
- **13. 反射机制的优缺点:**
- 14. 如何通过反射调用对象的方法?
- 15. Error 和 Exception 有什么区别?
- 16. 阐述 final、finally、finalize 的区别
- 17. 列出一些你常见的运行时异常?
- 18. 什么是受检异常
- 19. Excption与Error包结构
- 20. **try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?**
- 21. **运行时异常与一般异常有何异同?**
- 22. **error和exception有什么区别?**
- 23. 简单说说Java中的异常处理机制的简单原理和应用。
- 24. Java 语言如何进行异常处理,关键字:throws、throw、try、catch、finally 分别如何使用?
接上篇:
2021年超详细的Java面试题及答案整理 - 基础入门篇
1. String 是最基本的数据类型吗?
不是。
Java 中的基本数据类型只有 8 个 :byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(referencetype),Java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。
2. Java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String
、StringBuffer
、StringBuilder
。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。
而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,
所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
3. String、StringBuffer和StringBuilder区别(类似上一题)
1、数据可变和不可变
String
底层使用一个不可变的字符数组private final char value[];
所以它内容不可变。StringBuffer
和StringBuilder
都继承了AbstractStringBuilder
底层使用的是可变字符数组:char[] value;
2、线程安全
StringBuilder
是线程不安全的,效率较高;而StringBuffer
是线程安全的,效率较低。
通过他们的append()
方法来看,StringBuffer
是有同步锁,而StringBuilder
没有:
@Override
public synchronized StringBuffer append(Object obj) {
toStringCache = null;
super.append(String.valueOf(obj));
return this;
}
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
3、 相同点
StringBuilder
与StringBuffer
有公共父类AbstractStringBuilder
。
最后,操作可变字符串速度:StringBuilder > StringBuffer > String
,这个答案就显得不足为奇了。
4. String str="i"与 String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。
代码示例:
String x = "叶痕秋";
String y = "叶痕秋";
String z = new String("叶痕秋");
System.out.println(x == y); // true
System.out.println(x == z); // false
String x = “叶痕秋” 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的元素,比如当执行“叶痕秋”时,java虚拟机会先在常量池中检索是否已经有“叶痕秋”,如果有那么就将“叶痕秋”的地址赋给