Java-02: Basic

数据类型

基本数据类型

  • 整数类型:byte/8, short/16, int/32, long/64
  • 浮点类型:float/32, double/64
  • 字符类型:char/16
  • 布尔类型:boolean/1

包装类型

包装类型让基本数据类型拥有了对象的特性,方便它们参与到面向对象的编程中,尤其是在集合框架、泛型以及需要表示 null 值时。

java
Integer i = 10;  // 装箱
int j = i;  // 拆箱

// 集合
ArrayList<Integer> numbers = new ArrayList<>(); // 不能使用ArrayList<int>
numbers.add(1);

// 泛型
Map<String, Integer> map = new HashMap<>(); // 键值对都要使用包装类型

// 方法参数
public void print(Integer i) {
    System.out.println(i);
}

// 返回值
public Integer add(int a, int b) {
    return a + b;
}

// 表示 null 值
Integer i = null;

// 与字符串互相转换
String str = "123";
Integer i = Integer.parseInt(str);
String str2 = i.toString();

// 网络编程和IO操作
Socket socket = new Socket("localhost", 8080);
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file);

// ORM
User user = userDao.findById(1);

缓存池

  • 缓存池:为了优化性能和节省内存,Java 为一些常用的值(如 -128 到 127)提供了一个缓存池,当需要这些值时,可以直接从缓存池中获取,而不是重新创建。

  • 缓存池范围:

    • Byte、Short、Integer、Long:默认缓存范围是 -128 到 127。
    • Character:缓存范围是 0 到 127(ASCII码)。
    • Boolean:缓存 true 和 false 两个实例。
java
public class CachePoolExample {
    public static void main(String[] args) {
        // Integer 缓存池示例
        Integer i1 = 100; // 自动装箱,100在-128到127范围内
        Integer i2 = 100; // 自动装箱,从缓存池中获取
        Integer i3 = 200; // 自动装箱,200超出-128到127范围,会创建新对象
        Integer i4 = 200; // 自动装箱,200超出范围,会创建新对象
        System.out.println("i1 == i2: " + (i1 == i2)); // true,因为都是从缓存池中获取的同一个对象
        System.out.println("i3 == i4: " + (i3 == i4)); // false,因为创建了两个不同的对象
        // Boolean 缓存池示例
        Boolean b1 = true;
        Boolean b2 = true;
        System.out.println("b1 == b2: " + (b1 == b2)); // true,Boolean缓存了true和false
        // Character 缓存池示例
        Character c1 = 'a'; // 'a'的ASCII码是97,在0到127范围内
        Character c2 = 'a';
        Character c3 = ''; // '中'的ASCII码超过127
        Character c4 = '';
        System.out.println("c1 == c2: " + (c1 == c2)); // true
        System.out.println("c3 == c4: " + (c3 == c4)); // false
        // 正确比较包装类型的值应该使用 equals() 方法
        System.out.println("i3.equals(i4): " + i3.equals(i4)); // true
    }
}
  • new Integer(123) 与 Integer.valueOf(123) 的区别: new Integer(123) 会创建一个新的对象,而 Integer.valueOf(123) 会从缓存池中获取一个对象

    java
    Integer i1 = new Integer(123);
    Integer i2 = Integer.valueOf(123);
    
    System.out.println(i1 == i2);  // false
    Integer i3 = Integer.valueOf(123);
    Integer i4 = Integer.valueOf(123);
    System.out.println(i3 == i4);  // true

String

wip