Java 常用类:
·
目录
1.3 StringBuilder 和 StringBuffer 类:
1. java.lang 包 (核心基础类)
这个包是 Java 的核心,不需要手动 import。
1.1 Object 类:
- 作用: Java 中所有类的根类。
- 常用方法:
equals(Object obj): 比较两个对象是否相等。注意: 默认比较的是内存地址,通常需要重写。hashCode(): 返回对象的哈希码值,与equals方法紧密相关。toString(): 返回对象的字符串表示,建议重写以提供有意义的信息。getClass(): 返回对象的运行时类。wait(),notify(),notifyAll(): 用于多线程间的通信和同步。
代码示例:
public class Test {
private String name;
private int age;
// 重写 equals 方法
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Test person = (Test) obj;
return age == person.age && Objects.equals(name, person.name);
}
// 重写 hashCode 方法
@Override
public int hashCode() {
return Objects.hash(name, age);
}
// 重写 toString 方法
@Override
public String toString() {
return "Student{name='" + name + "', age=" + age + "}";
}
public static void main(String[] args) {
Test person1 = new Test();
person1.name = "张三";
person1.age = 18;
Test person2 = new Test();
person2.name = "张三";
person2.age = 18;
System.out.println(person1.equals(person2));// true
System.out.println(person1.hashCode());// -1062632135
System.out.println(person2.hashCode());// -1062632135
System.out.println(person1.toString());// Student{name='张三', age=18}
}
}
1.2 String 类:
- 作用: 不可变的字符序列。一旦创建,其值不能被修改。
- 常用方法:
length(): 返回字符串长度。charAt(int index): 获取指定索引的字符。substring(int beginIndex, int endIndex): 截取子字符串。equals(Object anObject): 比较字符串内容是否相等。强烈推荐,而不是==。equalsIgnoreCase(String anotherString): 忽略大小写比较。indexOf(String str)/lastIndexOf(String str): 查找子串位置。startsWith(String prefix)/endsWith(String suffix): 判断前缀 / 后缀。split(String regex): 按正则表达式分割字符串。replace(CharSequence target, CharSequence replacement): 替换字符或子串。trim(): 去除首尾空白字符 (Java 11+ 推荐使用strip())。
代码示例:
public class Test {
public static void main(String[] args) {
//final 修饰的类是始终类,不能被继承,断子绝孙类
//为什么要设计成final,不希望子类去重写父类的方法
//String类的操作方法是:一个标准
String s1 ="123";
String s2 = new String("123");
String s3 = s1.intern();
System.out.println(s1==s3);
System.out.println(s1.equals(s3));
//长度,去除空格,截取,分割,替换,连接,转换,输出....
System.out.println(s1.length());//方法
int[] as = new int[10];
System.out.println(as.length);//属性
String s4 = " 123 ";
System.out.println(s4.trim());
System.out.println(s4.length());
System.out.println(s4.trim().length());
String s5 = " 12 3 ";
System.out.println(s5.trim().length());
String result ="";
char[] cs = s5.toCharArray(); // 把一个字符串转换成数组
for(char c:cs)
{
if(c>= '0' && c <='9')
{
result+=String.valueOf(c);
}
}
System.out.println(result);
String s6 = "123456";
System.out.println(s6.charAt(0));
System.out.println(s6.indexOf("5"));
String s7 = "lixin@qq.com";
System.out.println(s7.indexOf(".")>0);
System.out.println(s7.indexOf("@")>0);
System.out.println(s7.indexOf(".")>0 && s7.indexOf("@")>0);
System.out.println(s7.charAt(s7.indexOf(".")));
String s8 ="a.txt.txt";
System.out.println(s8.charAt(s8.lastIndexOf(".")));
System.out.println(s8.substring(1));
System.out.println(s8.substring(s8.indexOf(".")));
System.out.println(s8.substring(s8.indexOf(".")).equals(".txt"));
System.out.println(s8.substring(s8.lastIndexOf("."), s8.length()));
System.out.println(s8.startsWith("a"));
System.out.println(s8.endsWith(".txt"));
String s9 ="13913321086,13913321087,13913321086";
String[] strs = s9.split(",");
for(String s :strs)
{
System.out.println(s);
}
//替换
String str ="我讨厌你";
String result1 = str.replaceFirst("讨厌你", "喜欢你");
System.out.println(result1);
//格式化输出
String str1 = String.format("你好,%s,%s", "张三","李四");
System.out.println(str1);
String str3 = str1.concat("23");
}
}
1.3 StringBuilder StringBuffer 类:
- 作用: 可变的字符序列,用于高效拼接字符串。
- 区别:
StringBuffer: 线程安全,但性能较低。StringBuilder: 非线程安全,性能高。单线程环境下首选。
- 示例代码:
(单线程下StringBuilder时间更短,更占优势)
//测试StringBuffer和StringBuilder的效率
public class Test {
public static void test1(long size, String str) {
StringBuffer sb = new StringBuffer();
long startTime = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
sb.append(str);
}
long endTime = System.currentTimeMillis();
System.out.println("StringBuffer的拼接字符串的时间为:" + (endTime - startTime));
}
public static void test2(long size, String str) {
StringBuilder sb = new StringBuilder();
long startTime = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
sb.append(str);
}
long endTime = System.currentTimeMillis();
System.out.println("StringBuilder的拼接字符串的时间为:" + (endTime - startTime));
}
public static void main(String[] args) {
long size = 3000000;
String str = "123456";
test1(size, str);// 52 125
test2(size,str); //39 73
}
}
(多线程状态下StringBuffer更占据优势)
这里代码量过多,小编用截图给大家演示

这里可看出StringBuffer输出的值为固定的10000,因为其具有线程安全性。
但是StringBuilder输出的数值并不固定。
- 建议使用原则:
如果在单线程环境中操作字符串,优先使用 StringBuilder
如果在多线程环境中需要操作共享的字符串缓冲区,则使用 StringBuffer
- 常用方法:
append(...): 在末尾追加内容。insert(int offset, ...): 在指定位置插入内容。delete(int start, int end): 删除指定范围的内容。reverse(): 反转字符串。toString(): 转换为String对象。
- 代码示例:
-
public class Springbuffer { public static void main(String[] args) { StringBuffer sb1 = new StringBuffer("123"); StringBuffer sb2 = new StringBuffer("123"); System.out.println(sb1 == sb2);// false //StringBuffer 类没有重写从 Object 类继承来的 equals 方法 System.out.println(sb1.equals(sb2));// false System.out.println(sb1.append(true));// 123true System.out.println(sb1.insert(0, "6"));// 6123true System.out.println(sb1.reverse());// eurt3216 System.out.println(sb1.delete(0, 2));//rt3216 } }
1.4 包装类:
作用: 为 8 种基本数据类型提供对象形式的表示,以便在需要对象的场景(如集合)中使用.
- 对应关系:
-
int->Integer, char->Character- ,
boolean->Boolean, -
byte->Byte, short->Short,long->Long,float->Float,double->Double。
- 常用方法:
- 装箱 (Boxing):
Integer i = Integer.valueOf(10);(或自动装箱Integer i = 10;) - 拆箱 (Unboxing):
int num = i.intValue();(或自动拆箱int num = i;) - 类型转换:
parseInt(String s)(字符串转int),toString()(数字转字符串)。
- 装箱 (Boxing):
- 代码示例
-
public class Test { public static void main(String[] args) { // 装箱 Integer a = 10; // 自动装箱 Integer b = Integer.valueOf(20); // 手动装箱 // 拆箱 int c = a; // 自动拆箱 int d = b.intValue(); // 手动拆箱 // 类型转换 String numStr = "100"; int con = Integer.parseInt(numStr);// 字符串转换成数字 String backToStr = Integer.toString(con);// 数字转换成字符串 System.out.println("装箱: " + a + ", " + b);// 10, 20 System.out.println("拆箱: " + c + ", " + d);// 10, 20 System.out.println("类型转换: " + numStr + " -> " + con + " -> " + backToStr);// 100 -> 100 -> 100 } }
2. java.util 包 (工具类和集合框架)
2.1 集合框架:
(小编有一期专门讲集合的文章可以看一下,这里罗列出来就不进行代码示例了)
-
集合框架 (Collections Framework):
List接口: 有序、可重复的集合。ArrayList: 最常用。底层是动态数组,查询快,增删慢。LinkedList: 底层是双向链表,增删快,查询慢。Vector: 古老的List实现,线程安全,但性能较差,已被ArrayList替代。
Set接口: 无序、不可重复的集合。HashSet: 最常用。底层是哈希表,存取速度快。LinkedHashSet: 在HashSet基础上维护了元素的插入顺序。TreeSet: 元素会自动进行排序(自然排序或自定义排序)。
Map接口: 存储键值对 (key-value),key 唯一。HashMap: 最常用。底层是哈希表,存取速度快。允许null键和null值。LinkedHashMap: 在HashMap基础上维护了键值对的插入顺序。TreeMap: 键会自动进行排序。Hashtable: 古老的Map实现,线程安全,不允许null键和null值,性能较差,已被HashMap替代。
-
Arrays类:- 作用: 操作数组的工具类,提供了大量静态方法。
- 常用方法:
sort(): 排序数组。binarySearch(): 二分查找。toString(): 将数组转为字符串。copyOf(): 复制数组。fill(): 填充数组。
-
Collections类:- 作用: 操作集合的工具类,提供了大量静态方法。
- 常用方法:
sort(): 排序List。binarySearch(): 在List中二分查找。max()/min(): 查找最大 / 最小值。reverse(): 反转List。shuffle(): 随机打乱List。synchronizedList()/synchronizedMap(): 将集合包装成线程安全的集合。
3.日期和时间
java.time 包 (Java 8+): 现代 Java 开发的首选。线程安全,API 设计清晰。
-
LocalDate: 只表示日期 (年、月、日)。LocalTime: 只表示时间 (时、分、秒、纳秒)。LocalDateTime: 表示日期和时间。ZonedDateTime: 带时区的日期和时间。DateTimeFormatter: 用于日期时间的格式化和解析。
代码示例:
// 获取当前日期时间
LocalDateTime now = LocalDateTime.now();
// 格式化输出
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedNow = now.format(formatter); // "2025-10-7 15:30:00"
// 解析字符串
LocalDateTime parsedDate = LocalDateTime.parse("2023-10-7 15:30:00", formatter);
更多推荐


所有评论(0)