System,Runtime,Math,StringBuffer和StringBuilder
System,Runtime,Math
在Java中,System、Runtime 和 Math 是三个非常常用且重要的类,它们分别属于不同的包(java.lang),提供了不同的功能。下面是对这三个类的简要介绍:
1. System 类
System 类位于 java.lang 包中,因此它是自动导入的,不需要显式地导入。这个类提供了一些有用的类字段和静态方法,用于访问与Java运行时环境相关的系统属性和资源。
-
常用方法
:
System.out.println(String x):向标准输出设备(通常是控制台)打印一个字符串,并换行。System.exit(int status):终止当前运行的Java虚拟机。参数是一个状态码,0通常表示正常退出。System.currentTimeMillis():返回自1970年1月1日00:00:00 GMT以来的毫秒数。System.getProperty(String key):获取系统属性的值。
2. Runtime 类
Runtime 类也是位于 java.lang 包中,它代表了Java程序运行时的环境。每个Java应用程序都有一个 Runtime 实例,该实例允许应用程序与Java运行时的环境接口。
-
常用方法
:
Runtime.getRuntime():返回当前Java应用程序的Runtime对象。Runtime.exec(String command):执行指定的字符串命令。Runtime.freeMemory():返回Java虚拟机中的空闲内存量。Runtime.totalMemory():返回Java虚拟机试图使用的总内存量。Runtime.maxMemory():返回Java虚拟机试图使用的最大内存量。
3. Math 类
Math 类同样位于 java.lang 包中,它包含用于执行基本数学运算的方法,如指数、对数、平方根和三角函数。
-
常用方法
:
Math.abs(int a):返回整数的绝对值。Math.ceil(double a):返回大于或等于参数的最小双精度浮点数,等于一个整数。Math.floor(double a):返回小于或等于参数的最大双精度浮点数,等于一个整数。Math.max(int a, int b):返回两个整数中的最大值。Math.min(int a, int b):返回两个整数中的最小值。Math.pow(double a, double b):返回第一个参数的第二个参数次幂的值。Math.random():生成一个大于等于0.0且小于1.0的随机双精度浮点数。Math.round(double a):返回最接近参数的long。Math.sqrt(double a):返回正确舍入的double值的正平方根。
这些类在Java开发中非常有用,涵盖了系统操作、运行时环境管理和数学计算等多个方面。
4.StringBuffer和StringBuilder类
StringBuffer 和 StringBuilder 是 Java 中用于构建可变字符串的类。它们允许我们在创建后修改字符串的内容,这与 Java 中的 String 类不同,后者是不可变的。当需要频繁修改字符串时,使用 StringBuffer 或 StringBuilder 比使用字符串连接(如使用 + 操作符)更高效,因为后者在每次连接时都会创建一个新的字符串对象。
主要区别
- 线程安全性:
StringBuffer是线程安全的,这意味着它的所有公开方法都是同步的。这意呀着在多线程环境中,当一个线程访问StringBuffer对象时,其他线程不能访问它,直到该线程完成操作。相比之下,StringBuilder不是线程安全的,因此它在单线程环境中性能更好。 - 性能:由于
StringBuilder没有同步开销,因此它通常比StringBuffer快。但是,在需要线程安全性的情况下,应使用StringBuffer。
使用场景
- 如果你在多线程环境中工作,并且需要构建可变字符串,那么应该使用
StringBuffer。 - 如果你在单线程环境中工作,并且需要构建可变字符串,那么使用
StringBuilder将是更好的选择,因为它提供了更好的性能。
示例
下面是一个使用 StringBuilder 的简单示例:
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello, ");
sb.append("world!");
System.out.println(sb.toString()); // 输出: Hello, world!
}
}
在这个示例中,我们创建了一个 StringBuilder 对象,并使用 append 方法向其添加文本。最后,我们使用 toString 方法将其转换为一个普通的 String 对象,并将其打印出来。
注意事项
- 虽然
StringBuffer和StringBuilder提供了修改字符串的便利,但它们也会消耗更多的内存,因为它们在修改时会创建新的字符数组(如果需要的话)。然而,与创建大量String对象相比,这种内存使用通常是可接受的。 - 在某些情况下,如果你知道字符串的最终长度,可以在创建
StringBuilder或StringBuffer时指定一个初始容量,以减少重新分配内部字符数组的需要。但是,如果指定的容量太小,并且后续添加了更多的内容,则仍然可能需要重新分配数组。因此,通常建议让StringBuilder或StringBuffer自动管理其容量。

浙公网安备 33010602011771号