1. Java中的String
是不可变的,这意味着什么?
答案:
String
对象一旦创建,其内容不能被修改。- 每次对
String
对象进行修改操作(如拼接、替换等)时,实际上会创建一个新的String
对象。 - 示例:
String str = "hello"; str = str + " world"; // 实际上创建了一个新的String对象
- 不可变性的好处:
- 线程安全:
String
对象可以被多个线程共享,而不需要额外的同步。 - 缓存优化:JVM可以缓存常用的
String
对象(如字符串常量池)。 - 安全性:防止恶意代码篡改字符串内容。
- 线程安全:
2. Java中的垃圾回收机制是什么?
答案:
- Java的垃圾回收机制是一种自动内存管理机制,用于回收不再使用的对象所占用的内存。
- 垃圾回收器(GC)会定期扫描堆内存,识别并回收那些没有被任何引用指向的对象。
- 示例:
Object obj = new Object(); obj = null; // obj不再指向对象,对象成为垃圾回收的目标 System.gc(); // 建议JVM运行垃圾回收器(不保证立即执行)
- 垃圾回收机制的优点:
- 减少内存泄漏:自动回收无用对象,减少内存泄漏的风险。
- 简化内存管理:开发者无需手动管理内存分配和释放。
3. Java中的autoboxing
和unboxing
是什么?
答案:
- 自动装箱(Autoboxing):将基本数据类型自动转换为对应的包装类类型。
Integer i = 10; // 自动装箱,将int转换为Integer
- 自动拆箱(Unboxing):将包装类类型自动转换为对应的基本数据类型。
int j = new Integer(20); // 自动拆箱,将Integer转换为int
- 示例:
Integer a = 10; // 装箱 int b = a; // 拆箱
- 自动装箱和拆箱简化了代码,但需要注意性能问题,因为每次装箱或拆箱都会创建新的对象。
4. Java中的==
和equals()
有什么区别?
答案:
-
==
:- 用于比较两个变量的值是否相等。
- 对于对象类型,比较的是对象的内存地址(引用)。
- 示例:
int a = 10; int b = 10; System.out.println(a == b); // true String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false
-
equals()
:- 是
Object
类的方法,用于比较两个对象的内容是否相等。 - 默认情况下比较对象的内存地址,但可以被子类重写以实现自定义的比较逻辑。
- 示例:
String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1.equals(s2)); // true
- 是
总结:==
用于比较引用或基本数据类型的值,而equals()
用于比较对象的内容。
5. Java中的==
和equals()
有什么区别?
答案:
-
==
:- 用于比较两个变量的值是否相等。
- 对于对象类型,比较的是对象的内存地址(引用)。
- 示例:
int a = 10; int b = 10; System.out.println(a == b); // true String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false
-
equals()
:- 是
Object
类的方法,用于比较两个对象的内容是否相等。 - 默认情况下比较对象的内存地址,但可以被子类重写以实现自定义的比较逻辑。
- 示例:
String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1.equals(s2)); // true
- 是
总结:==
用于比较引用或基本数据类型的值,而equals()
用于比较对象的内容。