面试四

1、请你说说int和Integer的区别

  1. 类型
    int 是 Java 的一种基本数据类型(primitive data type)。
    Integer 是 int 的包装类(wrapper class),属于 Java 的引用类型。
  2. 默认值
    int 的默认值是 0。
    Integer 的默认值是 null,因为它是一个对象引用。
  3. 存储
    int 类型的变量直接存储数值。
    Integer 类型的变量实际上是一个对象的引用,这个对象封装了一个 int 类型的值。
  4. 操作
    int 支持直接的算术运算,如加法、减法等。
    Integer 需要通过方法来进行操作,例如 .intValue() 可以将 Integer 转换为 int 进行算术运算。不过,由于自动装箱和拆箱的存在,这个区别在代码中不总是显而易见。
  5. 使用场景
    int 通常用于数值运算,性能较高,因为它避免了对象的创建和管理。
    Integer 通常用于需要利用对象特性的场合,如泛型集合中,ArrayList 可以存储整数,但 ArrayList 是不合法的,因为泛型只能用于对象。
  6. 自动装箱与拆箱
    自动装箱(Autoboxing):Java 编译器可以自动将基本类型转换为相应的包装类型,例如,当你把 int 赋值给 Integer 时。
    自动拆箱(Unboxing):Java 编译器可以自动将包装类型转换为基本类型,例如,当你把 Integer 赋值给 int 时。
点击查看代码
int i = 10;  // 基本类型
Integer intObj = i;  // 自动装箱

int j = intObj;  // 自动拆箱

总结

虽然 int 和 Integer 都可以用来处理整数,但 int 是基本数据类型,效率更高,而 Integer 是包装类,提供了更多的方法和功能,允许你将整数作为对象来处理。在使用中需要根据具体的场景和需求来选择使用哪一种。

2、String/StringBuffer/StringBuilder 他们的区别

String、StringBuffer 和 StringBuilder 在 Java 中都用于处理字符串,但它们在性能和线程安全性方面有所不同:

  1. String
    不可变性:String 类的对象是不可变的。每次对 String 对象的操作都会生成一个新的 String 对象,原对象内容不变。这种不可变性使得 String 对象在多线程环境下是线程安全的。
    性能:由于不可变性,频繁对 String 对象进行修改操作(如拼接、替换)会产生许多临时对象,这可能会影响性能,特别是在大量操作时。
  2. StringBuffer
    可变性:StringBuffer 是可变的,它提供了多种方法来修改字符串内容,而不会产生新的对象(除非需要扩展内部存储容量)。
    线程安全:StringBuffer 中的大部分方法都是通过 synchronized 关键字同步的,这意味着它是线程安全的,适合在多线程环境中使用。但这也意味着在单线程环境下可能会有不必要的性能开销。
  3. StringBuilder
    可变性:与 StringBuffer 类似,StringBuilder 也是可变的,提供了丰富的方法来操作字符串内容。
    非线程安全:StringBuilder 不保证线程安全,这是它与 StringBuffer 最主要的区别。没有同步的开销使得 StringBuilder 在单线程环境下性能更优,是进行字符串拼接操作的首选。
    使用场景
    String:当字符串不经常变化,或者在字符串的不可变性对程序的安全性有重要作用时使用。例如,字符串常量、字符串池操作等。
    StringBuffer:在需要频繁修改字符串内容的多线程环境中使用,例如,后台线程进行的大量字符串处理。
    StringBuilder:在单线程环境中或确定字符串操作不会被多线程同时访问时使用,尤其是在需要频繁修改字符串内容的情况下,如大量字符串拼接。
    总结
    选择使用 String、StringBuffer 或 StringBuilder 时,需要考虑字符串的可变性需求、性能影响以及线程安全性。在大多数单线程应用中,StringBuilder 因其高效性而被广泛使用。在多线程环境中,如果字符串内容需要频繁修改,应该使用 StringBuffer。而对于不可变的字符串,或者字符串修改操作不频繁的情况,使用 String 类是最合适的。
posted @ 2024-04-10 10:48  充满希望与信心  阅读(13)  评论(0)    收藏  举报